2

首先,我将发布我到目前为止所做的事情:

from person in Persons
join customer in Customers on person.BusinessEntityID equals customer.PersonID
join salesOrderHeader in SalesOrderHeaders on customer.CustomerID equals salesOrderHeader.CustomerID
where salesOrderHeader.SubTotal > 1000
join address in Addresses on salesOrderHeader.BillToAddressID equals address.AddressID
where address.City == "Melton"
select new {
                person.FirstName,
                person.LastName,
                salesOrderHeader.SubTotal,
            address.City
       }

这个查询完美地工作,唯一的问题是我在firstnameand上取回了重复的行lastname。我可以通过添加Distinct()已经尝试过的扩展方法来解决这个问题,并且它可以工作,但我非常好奇如果它可以在没有任何扩展方法的情况下完成。

那么如何在firstnameand上没有任何重复行的情况下取回结果表lastname

编辑:在这种情况下,我收到这样的东西:

在此处输入图像描述

我只想拿回一个同类型的人,他花费的总价值。对不起,第一次没有更好地解释自己,忘了提到我想拿回这个人的总价值

4

1 回答 1

1

您需要的是 GroupBy 和聚合。

from person in Persons
join customer in Customers on person.BusinessEntityID equals customer.PersonID
join salesOrderHeader in SalesOrderHeaders on customer.CustomerID equals salesOrderHeader.CustomerID
where salesOrderHeader.SubTotal > 1000
join address in Addresses on salesOrderHeader.BillToAddressID equals address.AddressID
where address.City == "Melton"
group salesOrderHeader by new { person.FirstName, person.LastName } into g //new
select new {
                g.Key.FirstName,
                g.Key.LastName,
                SubTotal = g.Sum(salesOrderHeader => salesOrderHeader.SubTotal),
            address.City
       }

GroupBy 将多行合并为一行,这就是您想要的。

于 2013-03-22T12:40:14.340 回答