Я пытаюсь создать метод, который будет принимать Func<Object1, bool>
в качестве предложения where и выполнять его выбор в качестве подзапроса. Кажется, это вызывает ошибку в IQueryable
, когда он не может привести его к выражению, которое нужно проанализировать.
using System.Linq
using System.Data.Entity;
public IEnumerable<Object2> CreateObject2List<T> (Expression<Func<T, Object1> whereClause)
{
var parentQuery = (from r in dataSet.SomeObject
select new Object1 { Value1 = r.value1, Value2 = r.Value2 }
var subQuery = parentQuery.Where(whereClause)
.Select<Object1, Object2>( o => new Object2{
Value3 = Value1 + Value2,
Value4 = Value1 - Value2
})
return subQuery.ToList();
}
Проблема возникает в подзапросе. В нем говорится:
«IQueryable» не содержит определения «Выбор» и лучший
перегрузка метода расширения 'Queryable.Select<Object1, Object2>
(IQueryable<Object1>, Expression<Func<Object1, Object2>>)'
требует
получатель типа 'IQueryable'.
Я не понимаю, как не удается распознать, что я уже предоставил выражение в форме лямбды в подзапросе. Я убедился, что я использую и System.Linq и System.Data.Entity. Тип делегата, который он запрашивает, уже существует, так почему он не может скомпилироваться?
Также, для ясности, я делаю это, потому что есть другие подзапросы, которые будут выполнены позже, это не фрагмент кода 1: 1. Я собираюсь расширить возможности вызова метода как службы.
Буду признателен за любую помощь, и я могу предоставить более подробную информацию по мере необходимости, спасибо!