LINQ; forçant un nouveau {} pour revenir IQueryable?
-
11-09-2019 - |
Question
J'écrit une petite requête et dans son LINQPad fonctionne bien, mais (voir ci-dessous) Les tarifs ne sont pas retourné comme IQueryable, personne ne sait comment résoudre ce problème?
voir Fondamentalement tarifs = new ....,
from v in House
join gvt in
(from t in MyTariffs where t.Id == 3 select t)
on v.IdTariff equals gvt.Id
select new
{
Id = v.Id,
Tariffs = new
{
Deposit = gvt.CurrentDeposit
}
}
J'ai essayé cela, mais son invalide parce gvt n'est pas une table ou quelque chose?
from v in House
join gvt in
(from t in MyTariffs where t.Id == 3 select t)
on v.IdTariff equals gvt.Id
select new
{
Id = v.Id,
Tariffs = from x in gvt // NOTICE i am doing from x in gvt... But it fails..
select new
{
Deposit = gvt.CurrentDeposit
}
}
Bien sûr gvt ne contient que les valeurs que je veux, car il a la jointure interne ...
Je pouvais faire il suffit de tirer directement de mes MyTariffs (qui fonctionne retourne IQueryable) mais j'ai trop d'informations comme ne prenant pas en considération la jointure que je l'ai fait dans gvt?
from v in House
join gvt in
(from t in MyTariffs where t.Id == 3 select t)
on v.IdTariff equals gvt.Id
select new
{
Id = v.Id,
Tariffs = from x in MyTariffs // THIS has nothing to do with my join
select new
{
Deposit = gvt.CurrentDeposit
}
}
La solution
Sélectionnez les données dans un sous-requête - êtes-vous sûr que Id == 3 et Id == v.IdTariff? Si tel est vraiment le cas, alors vous pouvez ajouter une clause where à la requête externe pour sélectionner uniquement v lorsque v.IdTariff == 3. Je suppose, cependant, que vous voulez tous.
var q = from v in House
select new {
Id = v.Id,
Tariffs = (from g in MyTariffs
where g.Id == v.IdTariff
select g.CurrentDeposit)
};
exemple Groupés (décompilé / non testé), en réponse à vos commentaires.
var q = from v in House
join g in (from t in MyTariffs where t.Id == 3 select t)
group by v.Id into gvt
select new {
Id = gvt.Key,
Tariffs = gvt.g
};