2014-09-26 60 views
0

你能幫我把這個從sql轉換爲linq,我是linq的新手,並且一直在嘗試這個並且不能成功。讓我知道這是否甚至可能?加入多個分組,並選擇額外的列

SELECT max(Products.ProductID) as ProductID, Products.SKU, Products.Name, Products.RRP, Products.Price, 
        max(Products.FrontTall) as FrontTall, 
        ProductsCategory.SortOrder, 
        Products.ColorValue, 
        max(Products.ColorImg) as ColorImg, 
        Products.IsPrimary, 
        Products.Visible 
        FROM Products INNER JOIN ProductsCategory ON Products.ProductID = ProductsCategory.ProductID 
        WHERE (ProductsCategory.CategoryID = 5) AND (Products.Visible = 1) AND (Products.Inactive = 0) AND (Products.Deleted = 0 or Products.Deleted is null) 
        GROUP BY SKU, Products.Name, RRP, Price, ColorValue, ProductsCategory.SortOrder, IsPrimary, Visible 

,這就是我努力

var products = (from p in db.Products 
          join cp in db.ProductsCategories on p.ProductID equals cp.ProductID 
          where cp.CategoryID == catId && p.Visible == true && p.Inactive == false && (p.Deleted == null || p.Deleted == false) 
          group p by new { 
           p.SKU, 
           p.Name, 
           p.RRP, 
           p.Price, 
           p.ColorValue,    
           p.IsPrimary, 
           p.Visible, 
           cp.SortOrder 
          } into grouped 
          select new { 
           ProductID, 
           FrontTall, 
           ColorImg, 
           SKU = grouped.Key.SKU, 
           Name = grouped.Key.Name,        
           RRP = grouped.Key.RRP, 
           Price = grouped.Key.Price, 
           ColorValue = grouped.Key.ColorValue,        
           IsPrimary = grouped.Key.IsPrimary, 
           Visible = grouped.Key.Visible, 
           SortOrder = grouped.Key.SortOrder 
          }) 
         .OrderBy(x => x.SortOrder); 

我需要的產品ID,FrontTall和ColorImg字段值不包含在GROUP BY

在此先感謝。 Kish

回答

0
select new {ProductID = grouped.Max(x => x.ProductID)}