linq join iquery,如何使用defaultifempty

Posted

技术标签:

【中文标题】linq join iquery,如何使用defaultifempty【英文标题】:Linq join iquery, how to use defaultifempty 【发布时间】:2013-10-10 10:54:56 【问题描述】:

我已经编写了一个 linq 连接查询,如果其中一个为空,我想获取这些值...

代码:

var Details = 

UnitOfWork.FlightDetails
          .Query()
          .Join
          (
              PassengersDetails,
              x => x.Flightno,
              y => y.FlightNo,
              (x, y) => new
              
                  y.PassengerId,
                  y.classType,
                  x.Flightno,
                  x.FlightName,
              
          );

我想使用类似的东西..

"Above query".DefaultIfEmpty
(
    new 
    
        y.PassengerId,
        y.classType,
        string.Empty,
        string.Empty
    
);

FlightDetails 是类上的 Idatarepository 类型,PassengerDetailsIQueryable 局部变量结果。如果没有flightnoflightname 包含在整体结果中,如何获得PassengerId 和Classtype 的结果?

【问题讨论】:

我不确定DefaultIfEmpty() 是否可以使用匿名方法。尝试定义一个类并使用它。 您正在寻找已在其他问题中回答的“左外连接”的语法。这是 Method/Lambda LINQ 语法的顶部:***.com/questions/584820/… 【参考方案1】:

你基本上想要做一个左外连接。您当前使用 DefaultIfEmpty 方法的方式是,如果整个列表为空,则提供一个默认条目。

您应该加入PassengerDetails,如果为空,则为每个乘客详细信息列表调用默认值。这相当于左外连接,它有点像这样:

var data = from fd in FlightDetails
           join pd in PassengersDetails on fd.Flightno equals pd.FlightNo into joinedT
           from pd in joinedT.DefaultIfEmpty()
           select new 
                         nr = fd.Flightno,
                         name = fd.FlightName,
                         passengerId = pd == null ? String.Empty : pd.PassengerId,
                         passengerType = pd == null ? String.Empty : pd.PassengerType
                       

【讨论】:

以上是关于linq join iquery,如何使用defaultifempty的主要内容,如果未能解决你的问题,请参考以下文章

如何使用WHERE执行LINQ JOIN

如何使用 LINQ to SQL 执行 CROSS JOIN?

如何使用 Entity Framework Core 2.0 上的 lambda 语法在 LINQ 中实现 LEFT OUTER JOIN?

如何在 LINQ to Entities Join 中使用 Convert.Int32() 方法?

这个带有 Join 的 Linq 查询如何写成 Lambda?

实战 EF(LINQ) 如何以子查询的形式来 Join