使用LINQkit在LINQ to Entities中调用Expression

时间:2016-12-15 19:01:36

标签: c# entity-framework linq asp.net-mvc-5

我正在测试谓词构建器,我收到此错误

LINQ to Entities不支持LINQ表达式节点类型“Invoke”。 这是我的代码

 public partial class Product
{
    public static Expression<Func<UserAddress, bool>> IsSelling()
    {
        return p => p.ispeacc == true;
    }
}
public partial class Product
{
    public static Expression<Func<UserAddress, bool>> ContainsInDescription()
    {
        var predicate = PredicateBuilder.New<UserAddress>();

        predicate = predicate.Or(p => p.accNumber == "i****");

        return predicate;
    }
}
public class Accounts
{
    public UserAddress GetAccount()
    {
        var repositoryUAdd = new Repository<UserAddress>();
        var ispor = Product.IsSelling();
        var acc = Product.ContainsInDescription();
        UserAddress accInforesult = repositoryUAdd.GetEntitybybool(ispor.And(acc));

        return accInforesult;

    }
}

public T GetEntitybybool(
      Expression<Func<T, bool>> filter)
    {

        return DbSet.Where(filter).DefaultIfEmpty(null).FirstOrDefault();

    }

知道我做错了什么

1 个答案:

答案 0 :(得分:0)

LinqKit的var result="somedata \(fun) more data \(tempvalue)"; 类与EF不直接兼容。因此,您要么切换到另一个没有此类问题的谓词构建器库(例如Universal PredicateBuilder或我自己PredicateBuilder的答案,或者如果您想继续使用LinqKit,然后在结果谓词上使用PredicateUtils自定义方法:

Expand
查询源上的

UserAddress accInforesult = repositoryUAdd.GetEntitybybool(ispor.And(acc).Expand());

AsExpandable