Linq加入iquery,如何使用defaultifempty

use*_*957 29 c# linq asp.net-mvc-4

我有一个linq连接查询wriiten,我想取值,如果其中一个是空的...

码:

var Details = 

UnitOfWork.FlightDetails
          .Query()
          .Join
          (
              PassengersDetails,
              x => x.Flightno,
              y => y.FlightNo,
              (x, y) => new
              {
                  y.PassengerId,
                  y.classType,
                  x.Flightno,
                  x.FlightName,
              }
          );
Run Code Online (Sandbox Code Playgroud)

我想用...

"Above query".DefaultIfEmpty
(
    new 
    {
        y.PassengerId,
        y.classType,
        string.Empty,
        string.Empty
    }
);
Run Code Online (Sandbox Code Playgroud)

"FlightDetails"是类上的Idatarepository类型,"PassengerDetails"是可查询的局部变量结果.如何获得乘客ID和Classtype的结果,并且整体结果中不包含flightno和flightname.

Kri*_*tof 63

你基本上想要做一个左外连接.您当前使用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
                       }
Run Code Online (Sandbox Code Playgroud)