IQueryable不包含“选择”的定义

时间:2019-06-05 15:33:14

标签: c# linq lambda iqueryable

我正在尝试创建一个将Func<Object1, bool>用作where子句并对其执行Select子查询的方法。这似乎导致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”的接收者。

我不明白如何无法识别出我已经以子查询中的lambda形式提供了一个表达式。我确保同时使用System.Linq和System.Data.Entity。所要请求的委托类型已经存在,那么为什么不能编译呢?

此外,为清楚起见,我正在执行此操作,因为稍后还有其他子查询要执行,这不是一对一的代码段。我打算将方法调用作为服务进行扩展。

任何帮助将不胜感激,我可以根据需要提供更多详细信息,谢谢!!

1 个答案:

答案 0 :(得分:0)

您最有可能需要

Expression<Func<Object1, bool>>

如评论中所述,将.Select<Object1, Object2>(替换为.Select(