私はlinq結合クエリを作成しましたが、値の1つが空の場合は値を取得したいです...
コード:
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
ローカル変数の結果です。全体の結果にPassengerId
とflightno
を含めずにflightname
とClasstypeで結果を取得するにはどうすればよいですか?
基本的には、左外部結合を行います。現在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
}