Подтвердить что ты не робот

Linq присоединиться к iquery, как использовать defaultifempty

Я написал запрос соединения 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 тип Idatarepository класса, а PassengerDetails - это IQueryable локальной переменной IQueryable. Как я могу получить результат с PassengerId и Classtype без имени flightno и имени flightname включенных в общие результаты?

4b9b3361

Ответ 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
                       }