2013-03-14 29 views
1

我对LINQ很陌生,并且对我的表格进行分组时非常麻烦,所以所有内容都汇总在一起。我试图让这个显示所有购买超过50美元的顾客,即使他们有多个购买。在使用linq的SQL数据库中。这是我到目前为止,请帮助。在Linq中使用3张表进行分组

public class TopCustomerVM 
{ 
    public string Name { get; set; } 
    public decimal DollarsSold { get; set; } 

    public static List<TopCustomerVM> GetResults() 
    { 
     ACEEntities db = new ACEEntities(); 
     return (from c in db.Customers 
       join o in db.Orders on c.CustomerId equals o.CustomerId 
       join l in db.OrderLines on o.OrderId equals l.OrderId 

       into x 
       select new TopCustomerVM {       
         Name = c.FirstName + c.LastName, 
         DollarsSold = x.Sum(asdf => asdf.UnitCost * asdf.Quantity) 
         }) 
         .OrderByDescending(lkj => lkj.DollarsSold) 
         .Where(lkj => lkj.DollarsSold > 50) 
         .ToList();    
    } 
} 
+0

我不能做到这一点,但如果您编辑您的帖子并添加carraige回请帮助之后,代码的第一部分将正确格式化。 – 2013-03-14 01:48:57

+0

谢谢,我修好了 – user2167675 2013-03-14 01:52:01

回答

0

我相信这样的事情会给你所需的输出:

from record in 
    (from c in Customers 
    join o in Orders on c.Id equals o.CustomerId 
    join ol in OrderLines on o.Id equals ol.OrderId 
    let customerAndLine = new { Name = c.FirstName + ' ' + c.LastName, DollarsSold = ol.UnitCost * ol.Quantity } 
    group customerAndLine by customerAndLine.Name into grp 
    select new { Name = grp.Key, DollarsSold = grp.Sum(r => r.DollarsSold) }) 
where record.DollarsSold > 50 
orderby record.DollarsSold descending 
select record