【发布时间】:2016-02-16 06:53:13
【问题描述】:
我构造了一个动态搜索 linq 表达式。
我可以计算 List 中的记录数,但是如果我将 List 更改为 BindingList,我将无法在我的 Lambda 表达式中使用属性 Count。我收到以下错误:
发生“System.NotSupportedException”类型的未处理异常 在 EntityFramework.SqlServer.dll 中
附加信息:指定 LINQ to Entities 不支持类型成员“计数”。仅有的 初始化器、实体成员和实体导航属性是 支持。
这是一个小例子:
public class Toto
{
BindingList<Tata> tatas; // or List<Tata> tatas;
}
我的查询如下:
var c = System.Linq.Expressions.Expression.Parameter(typeof(Toto), c);
var member = System.Linq.Expressions.Expression.PropertyOrField(c, "tatas");
var memberCount = System.Linq.Expressions.Expression.PropertyOrField(member, "Count");
var constantValue = System.Linq.Expressions.Expression.Constant(2);
var countExpression = System.Linq.Expressions.Expression.Equal(memberCount, constantValue);
var lambdaExpression = System.Linq.Expressions.Expression.Lambda<Func<Bike, bool>>(countExpression, c);
using (var context = new Context())
{
var listResult = context.Totos.Where(lambdaExpression).ToList();
Console.WriteLine(listResult.Count);
}
如果 tatas 是 List 类型,则此代码运行良好,但我不知道如何使用 BindingList 上的 Count 属性来使我的 lambda 表达式工作。
【问题讨论】:
-
我使用的是 EF 6.1.3,但无法动态实现。如果我像这样
context.Totos.Where(c => c.tatas.Count > 2).ToList()自己编写 lambda 表达式,它会起作用。 Ivan Stoev 解决方案'工作正常。
标签: c# linq lambda field bindinglist