是否可以使用 Linq 创建一个组,其中项目属于多个组?

使用以下简单示例:

    public class Data
    {
        public string ID;
        public int From;
        public int To;
    }

还有这个 list :
    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
    };

我想按从和到范围内的每个可能的整数进行分组(尽管我可以为查询提供我想要的范围,例如 1 到 3,而不是找到最小值 + 最大值),并且在每个组中将是一个对分组 int 适合其范围的数据实例的引用。

难以解释,更容易显示每个组以及我期望在每个组中的实例:
[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 实例的情况下返回范围内的数字,这正是我所需要的。

最佳答案

尝试使用 GroupBy 而不是 Join 。我相信分组是相互排斥的。将所需的“分组”值加入 From <= Value AND To >= Value 上的数据列表

编辑
(回答你的评论)
你可以这样得到你的范围:

int min = data.Min(a => a.From);
int max = data.Max(a => a.To);
List<int> range = new List<int>();
for (int i = min; i <= max; i++)
    range.Add(i);

关于c# - Linq - 将项目归入多个组进行分组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2730147/

10-10 20:11