gpt4 book ai didi

c# - Linq to Entities 使用 Or 运算符对多个字段进行分组

转载 作者:太空宇宙 更新时间:2023-11-03 13:15:15 24 4
gpt4 key购买 nike

我有一个订单列表,需要以高效的方式创建相似订单组(最好不要撤回所有订单并手动比较)。

每个订单都有一个用户 ID 和电子邮件地址以及邮政编码和国家/地区的附加字段。

所以我需要按照以下规则创建组:

如果订单在组中具有相同的(用户 ID 电子邮件地址)(邮政编码国家/地区)

给定以下实体和数据

public class Order
{
public int UserId { get; set; }
public int OrderId { get; set; }
public string Email { get; set; }
public int PostCode { get; set; }
public string Country { get; set; }
}

示例数据

OrderId UserId  Email   PostCode    Country
1 1 blah1 111 au
2 1 blah2 111 au
3 2 blah1 111 au
4 2 blah2 111 au
5 3 blah3 111 nz
6 3 blah3 111 nz

示例结果

Group 1
1 1 blah1 111 au
2 1 blah2 111 au
3 2 blah1 111 au
4 2 blah2 111 au

Group 2
5 3 blah3 111 nz
6 3 blah3 111 nz

我能想到的唯一方法是在内存中手动迭代

这是否可以干净地使用 Linq to entities?

更新

研究一段时间后,我想我得出的结论是实现我想要的唯一方法是执行两个 groupby 并在内存中手动组合它们。

更新2

从逻辑上考虑,在 linq 中似乎没有针对此问题的优雅解决方案,可能需要使用 SQL 和 CTE 或其他一些递归解决方案来完成。

最佳答案

这里我已经对超过 1 列进行了分组,

  OrderViewModel OrderList   =from ord in order
group ord by new
{
ord.PostCode,
ord.Country,
ord.UserID,
ord.Email,
ord.OrderID
} into gr
select new OrderViewModel
{
OrderID = gr.Key.OrderID,
UserID = gr.Key.UserID,
Email = gr.Key.Email,
PostCode=gr.key.PostCode,
Country=gr.key.Country,
OrderList= gr.ToList()
};

OrderViewModel 是什么::

public class Order
{
public int UserId { get; set; }
public int OrderId { get; set; }
public string Email { get; set; }
public int PostCode { get; set; }
public string Country { get; set; }
public List<Order> OrderList { get; set; }
}

您应该在哪里决定分组数据的优先级,&你不想分组的数据将被作为一个列表。

关于c# - Linq to Entities 使用 Or 运算符对多个字段进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26622441/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com