IQueryable не содержит определения для «Выбрать» - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь создать метод, который будет принимать 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. Я собираюсь расширить возможности вызова метода как службы.

Буду признателен за любую помощь, и я могу предоставить более подробную информацию по мере необходимости, спасибо!

1 Ответ

0 голосов
/ 05 июня 2019

Скорее всего, вам нужно

Expression<Func<Object1, bool>>

и заменить .Select<Object1, Object2>( на .Select(, как указано в комментариях

...