2010-10-13 7 views
0

J'ai parcouru plusieurs des nombreuses questions sur Linq-to-SQL traitant des jointures, des comptes, des sommes et etc. Mais j'ai juste du mal saisir comment faire simple instruction SQL suivante ...Linq to Sql - Convertir une jointure et une somme de sql en linq

SELECT  
    tblTechItems.ItemName, 
    SUM(tblTechInventory.EntityTypeUID) AS TotalOfItemByType 
FROM   
    tblTechInventory 
INNER JOIN 
    tblTechItems ON tblTechInventory.ItemUID = tblTechItems.ItemUID 
GROUP BY 
    tblTechInventory.StatusUID, 
    tblTechItems.ItemName, 
    tblTechInventory.InventoryUID 
HAVING  
    tblTechInventory.StatusUID = 26 

Répondre

1

Essayez ceci:

var query = from e in db.tblTechInventory 
      join f in db.tblTechItems on e.ItemUID equals f.ItemUID into x 
      from y in x 
      group e by new { e.StatusUID, y.ItemName, e.InventoryUID } into g 
      where e.StatusUID == 26 
      select new { 
       g.Key.ItemName, 
       TotalOfItemByType = g.Sum(e => e.EntityTypeUID) 
      }; 
+1

il n'y a pas « tblTech Inventaire "tableau mentionné ici. – danijels

+0

@danijels: Mon erreur; il était difficile de lire son code avant qu'il ne soit reformaté pour ne pas être sur une seule ligne. S'il vous plaît voir mon edit. – jason

+0

downvote enlevé – danijels

1

Je vais vous donner un coup de feu ...

var results = tblTechInventory 
    .Join(tblTechItems, i=> i.ItemUID, o => o.ItemUID, (i,o) => new {i.ItemName, o.EntityTypeUID, o.StatusUID, i.ItemName, o.InventoryUID}) 
    .Where(o => o.StatusUID == 26) 
    .GroupBy(g => new {g.StatusUID, g.ItemName, g.InventoryUID}, (gr, items) => new {gr.Key.ItemName, items.Sum(i => i.EntityTypeUID)}); 
+0

Je souhaite que quiconque downvoted donnerait une idée de pourquoi ... – danijels