2012-02-07 41 views
0

我有以下模式:許多到一個內部聯接涉及最大LINQ lambda表達式()

Table1 
ID int 

Table2 
ID int 
Table1ID int 
Datetime datetime 

Table3 
ID int 
Table2ID int 
Name varchar(255) 

所有列not null。如何使用lambda表達式在LINQ中編寫以下SQL查詢?

select Table1.* 
    from Table2 
    inner join (
     select Table1ID, max(Datetime) as Datetime 
     from Table2 
     group by Table1ID 
    ) a on Table2.Table1ID = a.Table1ID and Table2.Datetime = a.Datetime 
    inner join Table3 on Table2.ID = Table3.Table2ID 
    inner join Table1 on Table1.ID = Table2.Table1ID 
    where Name = 'me' 

編輯:

我使用LINQ to EF。我曾嘗試

var myEntities = new MyEntities(); 
var a = myEntities.Table2.Select(x => new { x.Id, x.Datetime }).GroupBy(x => x.Id).Select(x => new { Id = x.Key, Datetime = x.Max(y => y.Datetime) }); 
var b = myEntities.Table2.Join(a.ToList(), x => new { Id = x.Table1Id, x.Datetime }, y => new { y.Id, y.Datetime }, (x, y) => x.Id); 
return myEntities.Table3.Where(x => x.Name == "me" && b.Contains(x.Table2Id)).Select(x => x.Table2.Table1).ToList(); 

,但它與

System.NotSupportedException: Unable to create a constant value of type 'Anonymous type'. Only primitive types ('such as Int32, String, and Guid') are supported in this context. 

突出上面的最後一行回來。堆棧跟蹤顯示它是ToList()引發此異常。

+0

什麼LINQ提供您使用的是什麼? LINQ to SQL? LINQ到EF?還有別的嗎?另外,你有什麼嘗試?爲什麼沒有工作? – svick 2012-02-08 01:10:21

回答

1

我想通了;這是

var b = myEntities.Table2.Join(a.ToList(), 

應該

var b = myEntities.Table2.Join(a, 

而且,查詢應

var myEntities = new MyEntities(); 
var a = myEntities.Table2.Select(x => new { x.Table1Id, x.Datetime }).GroupBy(x => x.Table1Id).Select(x => new { Table1Id = x.Key, Datetime = x.Max(y => y.Datetime) }); 
var b = myEntities.Table2.Join(a, x => new { x.Table1Id, x.Datetime }, y => new { y.Table1Id, y.Datetime }, (x, y) => x); 
return b.Join(myEntities.Table3, x => x.Id, y => y.Table2Id, (x, y) => new { x.Table1, y.Name }).Where(x => x.Name == "me").Select(x => x.Table1).ToList();