System.Linq.Dynamic不适用于Entity Framework

时间:2011-01-26 22:42:33

标签: 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'无法解析为有效的类型构造函数或函数。,靠近函数,方法或类型构造函数

如果我使用Linq2Sql而不是Linq2Entities,它的效果非常好。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:2)

如果有其他人像我一样碰到这个:

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

然而,只要你抛出像.Contains()这样的东西,你就会得到一个IQueryable,它可以工作。

您也可以明确地转换为IQueryable,如下所示:

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

答案 1 :(得分:0)