linq - System.Linq.Dynamic 不适用于 Entity Framework

标签 linq dynamic linq-to-entities

我正在尝试使用此处发布的 LINQ 动态查询库 - http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

它应该也适用于 EF,但我无法让它满足这一要求。

以下效果很好:

List<string> paramsList = new List<string> {"CustomerID"};
        var customer =
            ctx.Customers.Where(cus=>cus.CompanyName.Contains("A")).Select("new(" +
                                 string.Join(", ", paramsList.ToArray()) +
                                 ")");     

但是如果我省略“Where”子句并做这样的事情

List<string> paramsList = new List<string> {"CustomerID"};
        var customer =
            ctx.Customers.Select("new(" +
                                 string.Join(", ", paramsList.ToArray()) +
                                 ")");     

我收到以下错误:

'new' cannot be resolved into a valid type constructor or function., near function, method or type constructor

如果我使用 Linq2Sql 而不是 Linq2Entities,它会完美地工作。

我在这里错过了什么?

最佳答案

如果其他人像我一样遇到这个问题:

ctx.Customers 是一个 ObjectSet,不适用于 Dynamic Linq。

但是,只要你使用 .Contains() 之类的东西,你就会得到一个 IQueryable,它确实有效。

您还可以显式转换为 IQueryable,如下所示:

ctx.Customers.AsQueryable().Select(...)

关于linq - System.Linq.Dynamic 不适用于 Entity Framework ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4810929/

相关文章:

c# - 如何使 EF 使用字符串连接构建更新 SQL?

c# - 使用linq读取xml文件

java - 替换 JavaFX GridPane 中(行,列)处的节点

c - 计算矩阵中行和列的最简单方法

c# - 如何选择值列表中具有属性值的所有对象?

c# - LINQ to Entities 查询错误

C# 对 IEnumerables 的 IEnumerable 进行排序

c# - 具有多个谓词的 linq findall

c - Malloc 不创建内存

c# - 使用存储库模式从服务返回由 ID 选择的单个实体