2016-12-15 40 views
0

我測試的predicateBuilder和我收到此錯誤電話表達對實體LINQkit

的LINQ表達式節點類型「調用」不支持LINQ到實體。 這裏是我的代碼

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

    } 

任何想法,我做錯了

+0

是否出現錯誤這一行之後:'返回DbSet.Where(過濾器).DefaultIfEmpty(空).FirstOrDefault(); ' –

回答

0

從LinqKit的PredicateBuilder類是不直接與EF兼容。因此,您要麼切換到另一個沒有此類問題的謂詞構建器庫(如我的回答Establish a link between two lists in linq to entities where clause中的Universal PredicateBuilder或我自己的PredicateUtils類),或者如果要使用LinqKit,則可以使用Expand定製方法生成謂詞:

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

AsExpandable查詢源上:

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

謝謝展開工作得很好。 – user6272884