2009-06-24 13 views
0

Ich weiß derzeit der Compiler ist nicht diese Aussage gefällt. Fehler beim Abrufen derStumped auf Entity Framework & Lambda Expressions

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 

Mein Statement ich meine Repository-Klasse vorbei bin

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

Repository Klasse Methode finden

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

Ich bin mir nicht sicher, ob dies eine akzeptable Möglichkeit ist, dies zu tun, also bitte irgendwelche besseren Praktiken. Bei Lambda bin ich noch nicht der Größte. – OneSmartGuy

+0

Re den Kommentar - Ich bin nicht 100% sicher, wie das Modell aussieht, so schwer zu folgen ... aber es klingt wie Sie möchten c => c.Categories.Any (d => ...) –

Antwort

0

habe ich nur noch ein Verfahren in meinem Repository Klasse

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

     return qry.Models; 
    } 

Ich vermute, weil es geladen werden muss dies der beste Weg zu gehen.

4

mit EF Sie Expression<...> arbeiten müssen, angewendet (als Prädikat) mit Where:

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

Sie würden dann rufen, dass als:

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

Das Lambda dann in ein Expression<...> übersetzt.

Wenn Ihre Einrichtung komplexer ist, bitte klären.

+0

I habe immer noch Probleme mit der repositoryClass.Find (c => c.Categories.Where (d => d.CategoryParentID == typeID)); Nicht sicher, ob du es bemerkst, indem ich versuche, Modelle nach Kategorie zu bekommen. Ich habe classid, aber versuche zu sehen, ob Models.Categories es enthält. Dies ist die Art und Weise, in der ich versucht habe, einen Where in der Kategorie-Eigenschaft – OneSmartGuy

+0

zu machen. Die Categories-Eigenschaft ist eine List , da ein Modell in mehreren Kategorien aufgeführt ist. – OneSmartGuy

Verwandte Themen