通过Linq订购的大多数产品
本文关键字:大多数 Linq 通过 | 更新日期: 2023-09-27 18:19:02
我有以下两个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; }
}
假设我的数据服务返回一个列表
我想返回Order。Id、秩序。Product和Count(作为来自控制器动作的Json),所以我还需要创建一个新的POCO来保存结果。如下所示:
public class CustomerOrders
{
public Guid OrderId { get; set; }
public string Product { get; set; }
public int Count { get; set; }
}
一种方法是:
-
List<Order> by Product
组 - 项目进入
IEnumerable<CustomerOrders>
- 按
Count
排序结果
所以它看起来像这样:
(from o in orders
group o by o.Product into og
select new CustomerOrders { OrderId = og.First().Id,
Product = og.First().Product,
Count = og.Count() }
).OrderBy(r=>r.Count)
但是,OrderId
没有多大意义,除非它是Ids
的列表,因为您想要获得最有序的产品。
编辑:你是正确的,这是正确的语法
试试这个。你不需要客户名单。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
List<Orders> orders = new List<Orders>();
List<CustomerOrders> customerOrders = new List<CustomerOrders>();
var productOrders = orders.AsEnumerable()
.GroupBy(x => x.Product).ToList();
foreach (var productOrder in productOrders)
{
CustomerOrders newOrder = new CustomerOrders();
customerOrders.Add(newOrder);
newOrder.OrderId = productOrder.FirstOrDefault().Id;
newOrder.Product = productOrder.FirstOrDefault().Product;
newOrder.Count = productOrder.Count();
}
}
}
public class Orders
{
public Guid Id { get; set; }
public Guid CustomerId { get; set; }
public string Product { get; set; }
public DateTime Date { get; set; }
}
public class CustomerOrders
{
public Guid OrderId { get; set; }
public string Product { get; set; }
public int Count { get; set; }
}
}
如果您喜欢使用c#语法而不是linq:
var groupedOrders = orders.GroupBy(o => o.Product);
这将返回每个Group的igrougroup,其中key是Product name, value是包含该产品的所有订单的IEnumerable
var sortedGroups = groupedOrders.OrderByDescending(g => g.Count());`
按IEnumerable
顺序的计数降序排序。var projectedOrders = sortedGroups.Select(x => new CustomerOrders(){OrderId = x.First().Id,
Product = x.First().Product,
Count = x.Count()});
示例在此提供http://rextester.com/LRMW38599