2009-06-24 54 views
0

我目前知道編譯器不喜歡這種說法。收到錯誤難倒實體框架和Lambda表達式

Cannot convert lambda expression to delegate type 'System.Func<MyData.Models.SomeModels,bool>' because some of the return types in the block are not implicitly convertible to the delegate return type 

我聲明我傳遞給我的信息庫類

var qry = repositoryClass.Find(c => c.Categories.Where(d => d.CategoryParentID == typeID)); 

倉儲類查找方法

 public IEnumerable<SomeModels> Find(Func<SomeModels, bool> exp) 
    { 
     return (from col in _db.SomeModels where exp select col); 
    } 
+0

我不確定這是否是一種可接受的方式,因此請分享任何更好的做法。我還不是Lambda最偉大的。 – OneSmartGuy 2009-06-24 14:09:18

+0

重新評論 - 我不是100%確定模型是什麼樣子,很難遵循......但它聽起來像你可能想c => c.Categories.Any(d => ...) – 2009-06-24 17:37:23

回答

0

我只是在我的庫添加類的方法

public IEnumerable<Models> GetByCategory(int categoryID) 
    { 
     var qry = _db.ModelCategories.Where(p => p.CategoryID == categoryID).First(); 
     qry.Models.Load(); 

     return qry.Models; 
    } 

我猜,因爲它需要加載這是最好的一段路要走。

4

要與EF工作,你需要一個Expression<...>,應用(作爲謂詞)與Where

public IEnumerable<SomeModels> Find(Expression<Func<SomeModels, bool>> exp) 
{ 
    return _db.SomeModels.Where(exp); 
} 

你會再調用爲:

var qry = repositoryClass.Find(c => c.CategoryParentID == typeID); 

拉姆達然後翻譯成Expression<...>

如果您的設置更復雜,請澄清。

相關問題