1
我有一個會員表,用於記錄用戶是否是列表的成員。當對用戶的成員資格進行更新時,會寫入新記錄,並且原有記錄保持原樣,從而保留其成員資格的歷史記錄。要獲得用戶的成員資格狀態,請選擇最近的條目。在LINQ中執行FirstOrDefault的替代方法
下面是一些用戶列表成員數據的示例。目標是找到一個按列表和用戶分組的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;
的問題是如何編寫不使用嵌套FirstOrDefault呼叫引起我的MySQL實體框架供應商拋出一個查詢LINQ表達式「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();
你能發佈一些你的代碼嗎? – 2012-01-31 22:59:53