2010-03-06 5 views
0

Je suis en train de convertir cette requête SQL pour LINQ:Aidez-moi à convertir cette requête SQL pour LINQ

SELECT Items.p_Name Product, DiamondCategory.dc_Name Category, Diamond.d_Weight Weight 
FROM DiamondCategory 
INNER JOIN Diamond ON DiamondCategory.dc_Id = Diamond.dc_Id 
INNER JOIN Items ON Diamond.p_Id = Items.p_Id where Items.p_Id = 1 

Union donne aucun résultat:

var qry = (from d in myDatabaseDataSet.Diamond select d.d_Weight).Union 
      (from c in myDatabaseDataSet.Items select c.p_Name).Union 
      (from e in myDatabaseDataSet.DiamondCategory select e.dc_Name); 

Répondre

1

Union ne fait pas ce que vous voulez, vous avez besoin d'un Join. Ceci est la réponse générale:

from item in myDatabaseDataSet.Items 
    where item.p_Id = 1 
join diamond in myDatabaseDataSet.Diamond 
    on diamond.p_Id equals item.p_Id 
join category in myDatabaseDataSet.DiamondCategory 
    on diamond.dc_Id equals category.dc_Id 
select new 
{ 
    Product = item.p_Name, 
    Weight = diamond.d_Weight, 
    Category = category.dc_Name 
}; 

EDIT: De vos tags, il semble que vous utilisez LINQ to SQL. Si oui, alors quelque chose comme cela suffirait, en supposant que vous avez des contraintes clés étrangères entre les tables que vous avez mentionnés:

from item in myDatabaseDataSet.Items, 
    diamond in item.Diamonds, 
    category in diamond.DiamondCategory 
where item.p_Id = 1 
select new 
{ 
    Product = item.p_Name, 
    Weight = diamond.d_Weight, 
    Category = category.dc_Name 
}; 
+0

Merci pour l'aide, mais en utilisant ur les résultats édités dans les erreurs inculding « Un corps de requête doit se terminer par une clause select ou une clause de groupe, un terme d'expression invalide dans IN et; expected .. etc ". En utilisant votre premier "Joindre" son ok, mais je ne peux pas lier à datagridview1.datasource, AsDataView() que j'utilise pour lier le résultat de la requête à dgv n'apparaît pas dans la requête. (Liste). – DanSogaard

+0

@DanSogaard: En ce qui concerne le problème avec la deuxième requête que j'ai posté, tout dépend de choses comme les noms de vos tables etc. Vérifiez que vous avez réellement les noms que j'ai choisis (qui ont été choisis en devinant). Si la première requête fonctionne, vous êtes tous ensemble, alors. La liaison à une grille est une question totalement différente qui devrait être posée séparément. –

+0

Très bien, merci beaucoup. – DanSogaard

0

Vous ne devriez pas utiliser Union pour ce.

De MSDN:

Produces the set union of two sequences.

Vous devez utiliser Join qui:

Correlates the elements of two sequences based on matching keys.

Questions connexes