ЛИНК;заставить новый {} вернуть Iqueryable?
-
11-09-2019 - |
Вопрос
Я написал небольшой запрос, и в Linqpad он работает хорошо, но (см. ниже) Тарифы не возвращаются как Iqueryable, кто-нибудь знает, как это исправить?
В основном см. Тарифы = новые....,
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
}
}
Я попробовал это, но это недействительно, потому что 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 gvt // NOTICE i am doing from x in gvt... But it fails..
select new
{
Deposit = gvt.CurrentDeposit
}
}
Конечно, gvt содержит только те значения, которые мне нужны, потому что у него есть внутреннее соединение...
Я мог бы просто извлечь данные прямо из MyTariffs (который работает, он возвращает Iqueryable), но тогда у меня слишком много информации, поскольку она не учитывает соединение, которое я сделал в 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
}
}
Решение
Выберите данные в подзапросе. Вы уверены, что Id == 3? и Id == v.IdTariff?Если это действительно так, то вы можете добавить предложениеwhere во внешний запрос, чтобы выбирать только v, когда v.IdTariff == 3.Однако я предполагаю, что вы хотите их всех.
var q = from v in House
select new {
Id = v.Id,
Tariffs = (from g in MyTariffs
where g.Id == v.IdTariff
select g.CurrentDeposit)
};
Сгруппированный пример (некомпилированный/непроверенный) в ответ на ваши комментарии.
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
};