У меня есть запрос Linq, использующий оператор let, из которого я получаю несколько подзапросов. На данный момент я делаю 3 подзапроса для получения подсчетов с использованием 3 идентичных объединений, и я надеюсь объединить их в один подзапрос всего одним объединением. У меня что-то вроде этого:
let TheFruits = (complex query).ToList(),
Counter1 = (from TheTable in MyDC.SomeTable
join x in Thefruits on
TheTable.FruitID equals x.FruitID
where x.Field1 == 1
select x).Count(),
Counter2 = (from TheTable in MyDC.SomeTable
join x in Thefruits on
TheTable.FruitID equals x.FruitID
where x.Field2 == 2
select x).Count(),
Counter3 = (from TheTable in MyDC.SomeTable
join x in Thefruits on
TheTable.FruitID equals x.FruitID
where x.Field3 == 3
select x).Count(),
Чтобы заменить 3 соединения, я хочу написать что-то вроде этого, но я не получаю методы расширения в свойствах объекта:
let TheFruits = (complex query).ToList(),
TheCounterObject = (from TheTable in MyDC.SomeTable
join x in Thefruits on
TheTable.FruitID equals x.FruitID
select new CounterObject()
{
Count1 = x.Where....Count(),
Count2 = x.Where....Count(),
Count3 = x.Where....Count(),
//not getting .Where extension
}).Single()
Проблема в том, что я не получаю методы расширения, только столбцы таблицы. В приведенном мною простом примере предложение .Where соответствует только одному условию, но в моем фактическом подзапросе присутствуют DateTimes и другие условия.
Как запустить подсчет на этапе сопоставления объектов?
Редактировать
Еще немного поработав, у меня теперь есть следующее:
let TheFruits = (complex query).ToList(),
TheCounterObject = (from TheTable in MyDC.SomeTable
join x in TheFruits on
TheTable.FruitID equals x.FruitID
into TheSubFruits
select new CounterObject()
{
Count1 = TheSubFruits.Where(x.FruitID == TheTable.FruitID && other conditions).Count(),
Count2 = TheSubFruits.Where(x.FruitID == TheTable.FruitID && other conditions).Count(),
Count3 = TheSubFruits.Where(x.FruitID == TheTable.FruitID && other conditions).Count()
}).First()
Проблема в том, что счет неправильный, и если я использую .Single () вместо .First (), я также получаю ошибку «Последовательность содержит более одного элемента».
Почему этот подзапрос не возвращает те же значения, что и 3 подзапроса? Что мне нужно изменить?