web-dev-qa-db-ja.com

Linq Join iQuery、defaultifemptyの使用方法

私は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型であり、PassengerDetailsIQueryableローカル変数の結果です。全体の結果にPassengerIdflightnoを含めずにflightnameとClasstypeで結果を取得するにはどうすればよいですか?

29
user1032957

基本的には、左外部結合を行います。現在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
                       }
63
Kristof