c# – 如何根据其他谓词而不是相等来进行GroupJoin?

我想在两个集合之间进行GroupJoin,但是基于一些其他谓词而不是相等.例如,如果我有一个带有项目的集合,每个集合都包含一个范围属性,我想将每个项目与来自另一个集合的项目相关联,这些项目具有一定范围内的值的属性.

这可以用
GroupJoin或任何其他LINQ方法完成吗? 最佳答案 假设这些是您的数据类型:

public class Range
{
    public int Start { get; set; }
    public int End { get; set; }
}

public class Item
{
    public int Number { get; set; }
}

这个Linq表达式会给你你想要的东西(包括重叠范围)

var ranges = new Range[];
var items = new Item[];

// ...

var rangeGroups = ranges
    .Select(r=> new {Range=r, Items=items.Where(i=> (r.Start <= i.Number) && (i.Number <= r.End))});

rangeGroups将为每个项目提供Range和Items.

看看这个在线演示 – https://ideone.com/HQomfc

点赞