2009-09-22 10 views
1

J'ai quelques difficultés quand il s'agit de requête multi-table dans Linq à Sql. J'ai 3 tables:Sql Query to Linq To Sql

  • Produit
  • Row (avec Fk-ProductId)
  • Prix (avec Fk-RowId)

Je voudrais récupérer le min (prix) pour un produit. J'ai été capable d'obtenir la bonne requête Sql, mais maintenant j'ai besoin de 'traduire' cette requête en Linq To Sql. Pouvez-vous m'aider s'il vous plaît?

Voici la requête Sql:

SELECT Min(cp.Price) 
FROM Products p, Rows r, ConstantPrices cp 
WHERE p.ProductId = r.ProductId AND 
     r.RowId = cp.RowId AND 
     p.ProductId = XXX; 

Répondre

1

Voici une solution:

decimal? min = (from p in db.Products 
       join r in db.Rows on p.ProductId equals r.ProductId 
       join cp in db.ConstantPrices on r.RowId equals cp.RowId 
       where p.ProductId == 1 
       select cp.Price).Min(); 
+0

Ne pas oublier de faire le annulable sur le terrain, comme je l'ai mentionné dans ma réponse ne serait donc faire jeter une exception s'il n'y a pas d'articles. – eglasius

0
var productQuery = from p in myContext 
       where p.id == someId 
       select (double?) p.Row.Price; 
var minPrice = productQuery.Min(); 

Il est important de la annulable là-dedans, il aurait par ailleurs échouer s'il n'y a pas des produits ou des lignes ou des prix du système.

Il ne s'agit pas de traduire des requêtes, c'est de profiter de ce que linq2sql vous offre.