2016-09-07 66 views
0

我在C#中有一个查询,我需要通过此查询对c.Same_invoice进行分组,并对分组的行中的列价格求和。Group By和Sum在LINQ查询中加入

我知道如何做分组和总和,但我不知道我的情况下的解决方案,加入和大量的数据。

实际的代码是:

var query = from c in snd.external_invoices.OrderByDescending(x => x.date) 
      join o in snd.invoices on c.idexternal_invoices equals o.id_external_invoice 
      select new{ 
       c.idexternal_invoices, 
       c.businessname, 
       o.number, 
       c.message, 
       c.price, 
       c.date, 
       c.iduser 
      }; 

感谢所有

+0

加入是一个非常,非常强烈的气味。实体之间的关系应在其映射中指定。 ORM(例如EF)只会在需要时生成适当的连接*,并只加载最终数据。在这种情况下,你甚至不需要分组,因为你返回所有的根对象。一个'c.Invoices.Sum(inv => inv.SomeField)'就足够了 –

+0

我明白你在说什么,但是我正在为一家咨询公司工作,客户有一个实体框架项目但决定不添加映射到数据库。我不允许更改数据库或映射。我只能用我拥有的东西来工作。感谢您的回复 –

+0

然后告诉他们他们必须修复他们的错误。无论如何,如果不知道你想要分组或总结什么,就无法提供帮助。你会如何在SQL中编写相同的语句? LINQ语句将是等效的。而客户仍然有一个非常丑陋的错误 –

回答

2

您可以使用类似:

var query = from c in snd.external_invoices.OrderByDescending(x => x.date) 
      join o in snd.invoices on c.idexternal_invoices equals o.id_external_invoice into grouped 
      select new{ 
       Invoice =grouped.key, Price = grouped.Sum(x => x.Price)}; 
+0

我已经试过你的代码,但c#不能识别分组点值 –

+0

分组点值是什么意思? –

+0

对不起!在选择新的我的LINQ语句中没有任何值分组的第二部分加入。我在分组变量中只有第一部分 –