J'ai écrit une requête de jointure linq et je voudrais prendre les valeurs, si l'une d'entre elles est vide ...
Code:
var Details =
UnitOfWork.FlightDetails
.Query()
.Join
(
PassengersDetails,
x => x.Flightno,
y => y.FlightNo,
(x, y) => new
{
y.PassengerId,
y.classType,
x.Flightno,
x.FlightName,
}
);
Je voudrais utiliser quelque chose comme ..
"Above query".DefaultIfEmpty
(
new
{
y.PassengerId,
y.classType,
string.Empty,
string.Empty
}
);
FlightDetails
est Idatarepository
tapez sur une classe et PassengerDetails
est IQueryable
résultat de la variable locale. Comment puis-je obtenir des résultats avec PassengerId
et Classtype sans flightno
et flightname
inclus dans les résultats globaux?
Vous voulez essentiellement faire une jointure externe gauche. La façon dont vous utilisez actuellement la méthode DefaultIfEmpty est que si la liste entière est vide, vous fournissez une seule entrée par défaut.
Vous devez vous joindre à PassengerDetails
et pour chaque liste de détails des passagers, appelez la valeur par défaut si vide. C'est l'équivalent d'une jointure externe gauche et cela va quelque chose comme ceci:
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
}