Linq join iquery, how to use defaultifempty

本文关键字:to use defaultifempty how join iquery Linq | 更新日期: 2023-09-27 18:34:40

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

法典:

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类型,PassengerDetails是局部变量结果IQueryable。如何在没有flightno的情况下获得PassengerId和类类型的结果,并且flightname包含在总体结果中?

Linq join iquery, how to use defaultifempty

你基本上想做一个左外连接。您当前使用 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
                       }