36

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
    }
);

FlightDetailsIdatarepositoryクラスの型であり、ローカルPassengerDetails変数IQueryableの結果です。全体的な結果に含めずにPassengerIdClasstype を使用して結果を取得するにはどうすればよいですか?flightnoflightname

4

1 に答える 1

79

あなたは基本的に左外部結合をしたいです。現在 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
                       }
于 2013-10-10T11:08:15.127 に答える