2012-01-31 9 views
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(); 
+0

你能發佈一些你的代碼嗎? – 2012-01-31 22:59:53

回答

0

沒有發佈代碼,任何人都很難看到你的問題是什麼。

您是不是隻能按日期字段排序結果,然後選擇第一條記錄?像users.OrderByDescending(u => u.Inserted).FirstOrDefault()