【问题标题】:Call Expression within a LINQ to Entities with LINQkit使用 LINQkit 在 LINQ to Entities 中调用表达式
【发布时间】:2016-12-15 19:01:36
【问题描述】:

我正在测试 predicateBuilder 并收到此错误

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();

    }

知道我做错了什么

【问题讨论】:

  • 此行之后是否出现错误:return DbSet.Where(filter).DefaultIfEmpty(null).FirstOrDefault(); ?

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


【解决方案1】:

来自 LinqKit 的 PredicateBuilder 类与 EF 不直接兼容。因此,您要么切换到另一个没有此类问题的谓词构建器库(如Universal PredicateBuilder 或我自己的PredicateUtils 类,来自我对Establish a link between two lists in linq to entities where clause 的回答),或者如果您想继续使用LinqKit,则使用Expand结果谓词的自定义方法:

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

或查询源上的AsExpandable

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多