2015-10-13 92 views
-4

加入命令我写了下面的JOIN语句在LINQ:如何编写LINQ在lambda表达式

var result = (from od in orders 
join em in employees on od.EmployeeID equals em.EmployeeID 
join ct in customers on od.CustomerID equals ct.CustomerID 

select new MyJoin 
{ 
    OrderID = od.OrderID, 
    //OrderDate = od.OrderDate, 
    ShipCountry = od.ShipCountry, 
    CompanyName = ct.CompanyName, 
    ContactName = ct.ContactName, 
    EmployeeName = (em.FirstName + ' '+em.LastName), 
}) 

我怎么会写这样的lambda表达式?

+2

你有尝试过什么吗? – Johan

+0

你有什么感想? – AgentFire

+0

问题是在LINQ和lambda中写入JOIN方法,我已经完成了LINQ,但不知道如何使用lambda表达式来完成。 – Sam

回答

0

我提供ReSharper的,作为一种服务:

var result = orders.Join(employees, 
         od => od.EmployeeID, 
         em => em.EmployeeID, 
         (od, em) => new { od, em }) 
        .Join(customers, 
         od => od.CustomerID, 
         ct => ct.CustomerID, 
         (obj, ct) => new MyJoin 
             { 
              OrderID = obj.od.OrderID, 
              OrderDate = obj.od.OrderDate, 
              ShipCountry = obj.od.ShipCountry, 
              CompanyName = ct.CompanyName, 
              ContactName = ct.ContactName, 
              EmployeeName = (obj.em.FirstName + ' ' + obj.em.LastName), 
             }); 

您正在使用Join扩展方法:

IEnumerable<TResult> Join<TOuter, TInner, TKey, TResult>(
      this IEnumerable<TOuter> outer, 
      IEnumerable<TInner> inner, 
      Func<TOuter, TKey> outerKeySelector, 
      Func<TInner, TKey> innerKeySelector, 
      Func<TOuter, TInner, TResult> resultSelector); 

对于第一个电话,这是它与你的LINQ语法以上:

outer: orders 
inner: employees 
outerKeySelector: od.EmployeeID 
innerKeySelector: em.EmployeeID 
resultSelector: <this is implied in your LINQ statements> 

outerKeySelectorinnerKeySelector与来自LINQ的equals的效果进行了比较。

+0

它甚至没有编译。在第二个“加入”中,您需要访问新匿名对象的字段,例如'obj => obj.od.CustomerID'和'(obj,ct)=> new MyJoin {OrderID = obj.od.OrderID,/ * ... */CompanyName = ct.CompanyName,/ * ... */EmployeeName =(obj.em.FirstName +''+ obj.em.LastName),})'。 – acelent

+0

很好,@PauloMadeira。我编辑过。 –