2017-03-14 36 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