【发布时间】:2023-03-26 17:41:01
【问题描述】:
是否可以使用 Linq 创建一个组,其中项目属于多个组?
使用以下简单示例:
public class Data
{
public string ID;
public int From;
public int To;
}
还有这份清单:
List<Data> data = new List<Data>()
{
new Data() { ID = "A", From = 1, To = 3 }, // Call this A
new Data() { ID = "B", From = 1, To = 2 }, // Call this B
new Data() { ID = "C", From = 2, To = 3 } // Call this C
};
我想按 From 和 To 范围内的每个可能的整数进行分组(尽管我可以为查询提供我想要的范围,例如 1 到 3,而不是找到 min + max),并且在每个组中将是对分组 int 适合其范围的 Data 实例的引用。
很难解释,更容易展示每个组和我期望在每个组中出现的实例:
[Group 1] 1 - A, B
[Group 2] 2 - A, B, C
[Group 3] 3 - A, C
这可能吗?或者组必须是互斥的?
编辑:加入方式可以做到这一点吗?
int[] range = new int[] { 1, 2, 3 };
var query = from d in data
from r in range
where d.From <= r && d.To >= r
group d by r into g
select g;
如果不首先确定范围,这可能吗?
编辑#2:使用答案二和重构,您可以:
var result = Enumerable.Range(1,3)
.Select(i => new
{
Key = i,
Values = data.Where(d => i >= d.From &&
i <= d.To)
});
这还有一个额外的好处,即在没有任何适合的 Data 实例的情况下也返回范围内的数字,这正是我所需要的。
【问题讨论】: