我有以下两个POCO
public class Customers
{
public Guid Id { get; set; }
public string FirstName{ get; set; }
public string LastName{ get; set; }
}
和
public class Orders
{
public Guid Id { get; set; }
public Guid CustomerId { get; set; }
public string Product { get; set; }
public DateTime Date { get; set; }
}
假设我的数据服务返回一个 List
我想返回 Customer.Id、Customer.FirstName、Customer.LastName、Count(作为来自 Controller 操作的 Json),因此我创建了一个新的 POCO 来保存结果。类似于以下内容:
public class MostActive
{
public Guid Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int Count { get; set; }
}
虽然它不起作用,但到目前为止,这是我目前的尝试:
var results = (from c in Customers
from o in Orders
where c.Id == o.CustomerId
orderby c.Id.Count descending
select new MostActive
{
FirstName = c.FirstName,
LastName = c.LastName,
Id = c.Id,
Count = h.Id.Count
}).Take(10);
最佳答案
这涉及几个步骤,您可以将其分解为:
- 按客户 ID 分组订单
- 按总数对分组进行排序
- 获得前 10 名
- 关联相关客户
- 创建结果对象
应该这样做:
var results = Orders
.GroupBy(o => o.CustomerId)
.OrderByDescending(og => og.Count())
.Take(10)
.Select(og => new {
Customer = Customers.Single(c => c.Id.Equals(og.Key)),
Orders = og
})
.Select(c => new MostActive {
Id = c.Customer.Id,
FirstName = c.Customer.FirstName,
LastName = c.Customer.LastName,
Count = c.Orders.Count()
});
或者从你开始的地方继续,也就是接近那里,这也可以。正如您所说,主要部分是添加分组,然后加入客户:
var results = (
from o in Orders
group o by o.CustomerId into og // create a grouping of orders by customerID
orderby og.Count() descending // sort by number of orders in each grouping
join c in Customers on og.Key equals c.Id // og.Key is the grouping Key (CustomerId)
select new MostActive
{
FirstName = c.FirstName,
LastName = c.LastName,
Id = c.Id,
Count = og.Count()
}).Take(10);
关于c# - 使用 Linq 获取前 10 个客户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33323230/