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
包含在总体结果中?
你基本上想做一个左外连接。您当前使用 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
}