如何基于除平等以外的其他谓词进行GroupJoin?

Chr*_*ian 5 c# linq

我想GroupJoin在两个集合之间做一个a ,但是要基于除相等性之外的其他谓词。例如,如果我有一个包含项目的集合,每个项目都包含一个range属性,那么我想将每个项目与另一个具有某个属性且值在该范围内的集合中的项目相关联。可以使用GroupJoin或任何其他LINQ方法来完成此操作吗? 具有结果组的两个集合

Jos*_*ush 1

假设这些是您的数据类型:

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

public class Item
{
    public int Number { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这个 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))});
Run Code Online (Sandbox Code Playgroud)

rangeGroups每个项目都会有Range和。Items

查看此在线演示 - https://ideone.com/HQomfc