У меня есть таблица членства, в которой записывается, является ли пользователь членом списка.Когда происходит обновление членства пользователя, записывается новая запись, а предыдущие записи остаются как есть, что позволяет вести историю их членства.Чтобы получить статус участника, необходимо выбрать его самую последнюю запись.
Пример некоторых данных о членстве в списке пользователей приведен ниже.Цель состоит в том, чтобы найти выражение LINQ, которое группирует по списку и пользователю, но возвращает только строку с последней вставленной записью.
List Name, Username, Comment, ExpiresOn, Inserted
Test List, joeb, second update, 2012-03-13 16:55:03, 2012-01-31 22:28:40
Test List, joeb, first update, 2012-02-13 16:55:01, 2012-01-31 22:28:39
Test List, joeb, initial, 2012-01-13 16:55:02, 2012-01-31 22:28:38
Запрос SQL показывает, как можно извлечь текущий статус членства в списке.
select ulm2.ID, ulm2.ExpiresOn, ulm2.Comment, ulm2.Inserted
from UserListMembership as ulm1
left outer join UserListMembership ulm2 on ulm1.id = ulm2.id
group by ulm1.userlistid, ulm1.userid;
Вопрос заключается в том, как написать выражение LINQ для запроса, который не использует вложенный вызов FirstOrDefault, который заставляет моего провайдера инфраструктуры сущностей MySQL выдавать «System.NotSupportedException: указанный метод не поддерживается».исключение?
Обновление:
Ниже мое ошибочное выражение LINQ выдает «Указанный метод не поддерживается» после добавления вызова FirstOrDefault.
var query = from mem in db.UserListMemberships
where
mem.User.UserUsernames.Any(y => y.Username.ToLower() == username.ToLower())
&& mem.UserList.Account.Subscriptions.Any(x => x.ID == subscriptionID)
&& mem.ExpiresOn > utcNow
group mem by new { mem.UserListID, mem.UserID } into g
select new { UserListMembership = (from mem2 in db.UserListMemberships where mem2.UserListID == g.Key.UserListID && mem2.UserID == g.Key.UserID orderby mem2.Inserted descending select mem2).FirstOrDefault() };
return query.Select(a => a.UserListMembership).ToList();