2015-07-13 475 views
0

有了下面的代碼,我得到的錯誤「LINQ到實體無法識別方法......」LINQ到實體無法識別方法

這是我的LINQ查詢:

var retour = await base.Query().Where(f => f.HasbeenEnabled && f.UniqueID == campaingUniqueID) 
      .Select(f => new GlobalInfoModel 
      { 
       FollowUpCompletion_Total = f.Questions 
         .SelectMany(g => g.Answers) 
         .FilterByKeyValue(filter) 
         .Count() 
     }).FirstOrDefaultAsync(); 

和這是靜態IQueryable方法:

public static IQueryable<Answer> FilterByKeyValue(this IQueryable<Answer> query, KeyFilterModel[] filters) 
    { 

     var expendable = query.AsExpandable(); 

     if (filters != null && filters.Length > 0) 
     { 
      var queryand = PredicateBuilder.True<Answer>(); 
      foreach (var filter in filters) 
      { 
       var predicate = PredicateBuilder.False<Answer>(); 
       foreach (var value in filter.FilterValues) 
       { 
        var key = string.Format(filter.Key); 
        var _value = string.Format(value); 
        predicate = predicate.Or(f => f.RespondentEntryID.HasValue && f.RespondentEntry.Values.Any(g => g.Key.Name.Equals(key) && g.Values.Equals(_value))); 
       } 
       queryand = queryand.And(predicate.Expand()); 
      } 
      query = expendable.Where(queryand); 
     } 
     return query; 
    } 
+0

的可能重複的[LINQ實體無法識別方法](http://stackoverflow.com/questions/7259567/linq-to-entities-does-not-recognize-the-method) –

+0

嘗試使用'AsEnumerable()'作爲'await base.Query()。AsEnumerable()。Where(...)...'我不確定,但它可以解決這個問題。 –

+1

@Aslam Jiffry在這個問題中Joeri正在使用支持Or謂詞連接的庫。 – bubi

回答

0

第一步,嘗試隔離問題。

無論如何,可能是缺少一個展開所以EF不能識別queryand.And。 連接And謂詞嘗試使用Where(而不是And)。

queryand = queryand.Where(predicate.Expand()); 
+0

我不認爲FilterByKeyValue方法是問題,因爲當我在註釋中設置所有代碼時,仍然會得到相同的錯誤。 –

+0

您是否在var retour聲明中對其發表評論?因爲EF試圖將其轉換爲SQL的唯一方法... – bubi

相關問題