LINQ; заставить новый {} вернуть Iqueryable? - PullRequest
0 голосов
/ 01 ноября 2009

Я написал небольшой запрос, и в 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
   }
}

1 Ответ

2 голосов
/ 01 ноября 2009

Выберите данные в подзапросе - вы уверены, что 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
        };
...