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
类型,PassengerDetails
是 IQueryable
局部变量结果。如果没有flightno
和flightname
包含在整体结果中,如何获得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的主要内容,如果未能解决你的问题,请参考以下文章