2009-06-24 9 views
0

私は現在コンパイラがこのステートメントを好きではないことを知っています。エラーエンティティフレームワークとラムダ式に困惑しました

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

リポジトリクラスは、あなたがExpression<...>を必要とするEFで作業する方法

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

これが受け入れる方法であるかどうかは分かりませんので、より良い方法を教えてください。私はまだラムダでは最高ではない。 – OneSmartGuy

+0

コメントを書き直してください - 私は100%モデルがどのように見えているかは分かりません。従うのは難しいですが、c => c.Categories.Any(d => ...)のように聞こえます。 –

答えて

0

は、私はちょうどそれが、これは行くための最善の方法であるロードする必要があるので、私は推測している

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

     return qry.Models; 
    } 

私のリポジトリクラスにメソッドを追加しました。

4

を探す私のリポジトリクラスに渡している私の声明は、として(適用ガイド述語)とWhere

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

それからとしてという呼びたい:

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

ラムダは、その後Expression<...>に翻訳されています。

設定が複雑な場合は、明確にしてください。

+0

I依然としてrepositoryClass.Find(c => c.Categories.Where(d => d.CategoryParentID == typeID))に問題があります。あなたがカテゴリ別にモデルを取得しようとしていることに気づいたかどうかはわかりません。私はcategoryidを持っていますが、Models.Categoriesにそれが含まれているかどうかを確認しようとしています。これは、私がカテゴリプロパティのどこにしようとしていたかです。 – OneSmartGuy

+0

BTWカテゴリプロパティは、複数のカテゴリにリストされているモデルのため、リストです。 – OneSmartGuy

関連する問題