c# - IQueryable 不包含 'Select' 的定义

标签 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' does not contain a definition for 'Select' and the best extension method overload 'Queryable.Select<Object1, Object2> (IQueryable<Object1>, Expression<Func<Object1, Object2>>)' requires a receiver of type 'IQueryable'.

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

此外,为了清楚起见,我这样做是因为稍后还要执行其他子查询,这不是一对一的代码片段。我打算将方法调用作为服务来实现可扩展性。

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

最佳答案

您很可能需要

Expression<Func<Object1, bool>>

并替换 .Select<Object1, Object2>(.Select( ,正如评论中提到的

关于c# - IQueryable 不包含 'Select' 的定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56463667/

相关文章:

C# 使用后期绑定(bind)读取 Excel

java - 在 Java 中将任何方法作为参数传递的功能接口(interface)

c# - 加密和 JSON 序列化一个对象

c# - 成为 "the real administrator"(Windows) 并在 .NET C# 中执行真正的管理任务?

c# - 通过变换而不是 fov 使用鼠标滚轮放大/缩小相机?

c# - Parallel.For w 创建不同任务的 Action,c#

c# - Linq 查询删除包含特定匹配号码的所有数据

c# - IEnumerable<T> 和 .Where Linq 方法行为?

c++ - 在 boost::python 的 add_property 中使用 c++11 lambda 作为访问函数(get_signature 因 lambda 而失败)

c++ - 通用 vector 类中的重载解析问题