2011-08-28 4 views
1

Je suis en train d'augmenter ma connaissance de LINQ, donc je voudrais créer la requête suivante sans utiliser une procédure stockée mais je ne suis pas vraiment sûr de savoir comment structurer.Aide LINQ to Entities interroger

Si j'ai trois tables/entités:

fermier (FarmerId, BusinessTitle)

Produire (ProduceId, ProduceTitle)

FarmerProduce (FarmerId, ProduceId)

Comment puis-je faire une requête qui recherche la BusinessTitle & ProduceTitle pour un mot particulier (par exemple Raspberry) et renvoyé une liste d'entités Farmer.

je peux réaliser une recherche de chaque agriculteur de produits séparément .: par exemple

var query = (from f in farmer 
      where f.BusinessTitle.Contains("raspberry") 
      select l).ToList(); 

var query = (from fp in FarmerProduce 
      where fp.Produce.ProduceTitle.Contains("raspberry") 
      select fp.Farmer).ToList(); 

Mais je ne suis pas sûr comment combiner la FarmerProduce « table de consultation » en une seule requête.

Répondre

1

Si vous avez seulement besoin agriculteurs:

var query = from f in farmer 
      where f.BusinessTitle.Contains("raspberry") 
        || f.Produces.Any(p => p.ProduceTitle.Contains("raspberry")) 
      select f; 

En supposant que le nombre à plusieurs était Inported comme une propriété de navigation Produces.

+0

bien! merci pour la réponse rapide qui fait l'affaire. BTW Je pense que le f.Produces.Any est censé être f.FarmerProduce.Any (c'est ce que je devais faire pour le compiler) – Rob

2

Celui-ci doit être simple ou dans LINQ par les regards de celui-ci.

var query = (from fp in FarmerProduce 
      where fp.Produce.ProduceTitle.Contains("raspberry") 
      || fp.Farmer.BusinessTitle.Contains("raspberry") 
      select fp.Farmer).Distinct().ToList(); 

Ajouté Distinct.

+1

lol oui en fait cela fonctionne aussi, j'avais apparemment un vide mental parce que c'est ce que je habituellement faire et est la réponse logique - désolé j'ai marqué l'autre comme correct mais l'un ou l'autre travail. Je pense que parce que je modifiais une requête originale en utilisant seulement farmer, je ne pensais pas passer à l'interrogation sur FarmerProduce. – Rob