【发布时间】:2021-06-17 08:29:56
【问题描述】:
我尝试获取所有具有相同值的键。
数据:
public class CustItems
{
public string CustID { get; set; }
public string ItemID { get; set; }
}
List<CustItems> custItems = new List<CustItems>();
// GetData => fill list
custItems.Add(new CustItems { CustID = "1", ItemID = "1" });
项目数量:50'000, 客户数量:2'000
基本列表包含2个字段,意思是,哪个客户可以购买哪个商品
| CustID | ItemID |
|---|---|
| 1 | 1 |
| 1 | 2 |
| 2 | 2 |
| 3 | 2 |
| 4 | 1 |
| 5 | 1 |
| 5 | 2 |
| 1 | 3 |
| 4 | 3 |
| 5 | 3 |
我试图找出哪些商品可以被同一客户购买
根据演示数据 客户 1,4,5 的项目 1 客户的项目 2 1,2,3,5 客户 1,4,5 的第 3 项
所以商品 1 和 3 可以由同一客户购买
不知道如何使用 lambda 或 linq 以高效的方式解决此问题。
非常感谢任何提示!非常感谢!
附言 从以下内容开始:
var groupedList = from c in custItems
group c by c.ItemID into grp
select new
{
ID = grp.Key,
CustList = grp.Select(g => g.CustID).ToList()
};
但毕竟,CustList 包含所有客户的键(ItemID),但找不到好的方法来找出,哪些键(=Item)具有相同的值(=CustList)
【问题讨论】:
-
...你想做什么?找到我们的哪些商品可以被哪些客户购买?找出哪些客户可以购买相同的商品?什么?
-
您可以考虑
GroupBy,然后检查集合。如果性能标准很严格,您可以检查特殊的相等检查算法,但分组部分必须相同。