2009-06-24 3 views
0

Je sais actuellement que le compilateur n'aime pas cette déclaration. Obtenir erreurStumped sur Entity Framework & Expressions 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 

Mon Déclaration Je passe à ma classe Repository

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

classe Repository Trouver Méthode

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

Je ne suis pas sûr que ce soit une façon acceptable de le faire alors s'il vous plaît partager de meilleures pratiques. Je ne suis pas encore le meilleur à Lambda. – OneSmartGuy

+0

Re le commentaire - Je ne suis pas sûr à 100% à quoi ressemble le modèle, si difficile à suivre ... mais on dirait que vous pourriez vouloir c => c.Categories.Any (d => ...) –

Répondre

0

Je viens d'ajouter une méthode dans ma classe Repository

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

     return qry.Models; 
    } 

Je devine, car il doit être chargé c'est la meilleure façon d'aller.

4

Pour travailler avec EF vous avez besoin d'un Expression<...>, appliqué (en prédicat) avec Where:

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

Vous auriez alors appelez ça comme:

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

Le lambda est ensuite traduite en un Expression<...>.

Si votre configuration est plus complexe, veuillez clarifier.

+0

I J'ai encore des problèmes avec le repositoryClass.Find (c => c.Categories.Where (d => d.CategoryParentID == typeID)); Je ne sais pas si vous remarquez que j'essaie d'obtenir des modèles par catégorie. J'ai categoryid mais essayant de voir si Models.Categories le contient. C'est de cette façon que j'essayais de faire un où sur la propriété de la catégorie – OneSmartGuy

+0

BTW la propriété Categories est une liste en raison d'un modèle étant répertorié dans plusieurs catégories. – OneSmartGuy