【问题标题】:How to write LINQ Join command in lambda expression如何在 lambda 表达式中编写 LINQ Join 命令
【发布时间】:2015-10-13 10:59:59
【问题描述】:

我在 LINQ 中编写了以下 JOIN 语句:

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 表达式?

【问题讨论】:

  • 你有没有尝试过?
  • 你试过什么?
  • 问题是在 LINQ 和 lambda 中编写 JOIN 方法,我为 LINQ 做过,但不确定如何使用 lambda 表达式。
  • 您要求某人为您编写代码,但没有显示任何您自己尝试的证据。这些类型的问题在 SO 上通常不受欢迎,尤其是当通过快速搜索在线提供许多解决方案时。
  • Stack Overflow有很多这样的例子,我刚刚搜索了linq join lambda,也有不少。

标签: c# linq lambda


【解决方案1】:

我提供 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 的效果进行比较。

【讨论】:

  • 它甚至无法编译。在第二个Join 中,您需要访问新匿名对象的字段,例如obj =&gt; obj.od.CustomerID(obj, ct) =&gt; new MyJoin { OrderID = obj.od.OrderID, /* ... */ CompanyName = ct.CompanyName, /* ... */ EmployeeName = (obj.em.FirstName + ' ' + obj.em.LastName), }).
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
相关资源
最近更新 更多