2012-02-01 88 views
0

除了之前的question之外,我已經能夠簡化查詢,但仍然存在與MySQL提供者有關的問題。試圖找到表達LINQ表達式的替代方法

我有一個會員表,記錄用戶是否是列表的成員。當對用戶的成員資格進行更新時,會寫入新記錄,並且原有記錄保持原樣,從而保留其成員資格的歷史記錄。要獲得用戶的成員資格狀態,請選擇最近的條目。

下面是一些用戶列表成員數據的示例。目標是找到一個按列表和用戶分組的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 

我的LINQ表達式如下。

var query = from mem in db.UserListMemberships 
      where 
      mem.Inserted >= (from mem2 in db.UserListMemberships where mem.UserID == mem2.UserID && mem.UserListID == mem2.UserListID orderby mem2.Inserted descending select mem2.Inserted).FirstOrDefault() 
      select mem; 

的問題是,我從MySQL的實體提供者得到一個異常「MySql.Data.MySqlClient.MySqlException:在‘where子句’未知列‘Extent1.UserID’」。有沒有其他方式可以寫出可能繞過MySQL異常的e表達式?

回答

1

試試這個,看看它是否適合你:

var query = 
    from mem in db.UserListMemberships 
    group mem by mem.UserID into mems 
    select mems.OrderByDescending(m => m.Inserted).First(); 
+0

首先使用這樣生成Linq到EF基礎設施「System.NotSupportedException內異常:法‘第一’只能作爲最後的查詢操作,請考慮在這個實例中使用方法'FirstOrDefault'。「 – sipwiz 2012-02-01 02:47:37

+0

@sipwiz - 感謝您的提示。乾杯。 – Enigmativity 2012-02-01 05:23:59