Вопрос

Я написал небольшой запрос, и в 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
        };
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top