【问题标题】:Linq join iquery, how to use defaultifemptylinq join iquery,如何使用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 语法的顶部:stackoverflow.com/questions/584820/…

标签: c# linq asp.net-mvc-4


【解决方案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
                       }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-07
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 2019-07-27
    • 1970-01-01
    相关资源
    最近更新 更多