2017-03-14 62 views
0

我有一個表:如何使用lambda編寫IQueryable Join?

MyTable 
(
ParentId Integer, 
Type Integer, 
ProdId String, 
Date DateTime, 
Status Integer 
); 

我要查詢的未來:

var res = from tout in myTable.Where(t1 => t1.Type == 1) 
       join tin in myTable.Where(t2 => t2.Type != 1) 
     on tout.ParentId equals tin.ParentId 
       where tout.ProdId == tin.ProdId && tout.Status > tin.Status 
       orderby tout.Date 
       select new MyTableStructure 
       { 
      ... 
     }; 

如何使用lambda寫一樣的IQueryable

+2

請糾正我,如果我錯了,但是從研究(B/C我不知道該怎麼辦,要麼) ,看起來兩種語法看起來都一樣。但是,這是您分配的類型,這會產生差異。 (即 - '的IQueryable 解析度= .....''VS的IEnumerable 解析度= .....'http://www.dotnettricks.com/learn/linq/ienumerable-vs-iqueryable –

+0

確定。補充,我也想用拉姆達 – Ksice

+0

https://msdn.microsoft.com/en-us/library/bb534675(v=vs.110).aspx – Milney

回答

1

像這樣的事情

var query1 = myTable.Where(t1 => t1.Type == 1); 
var query2 = myTable.Where(t2 => t2.Type != 1); 
var join = query1.Join(query2, x => x.ParentId, y => y.ParentId, (query1, query2) => new { query1 , query2 }).Where(o => o.query1.ProdId == o.qyuery2.prodId)....... 

您的訂單在明年有什麼東西

+0

多謝唯一要注意的(我花了一些時間來實現什麼究竟錯) - 新{QUERY2,QUERY1} - 明智的,反之亦然順序應該是有,以匹配原始連接 – Ksice