我有一个包含许多“乐队”的列表,如下所示:
var bands = new List<Band>();
bands.Add(new Band(1, 12, 1, 100, 199, 100, 292));
bands.Add(new Band(1, 5, 1, 200, 1000, 100, 292));
bands.Add(new Band(6, 6, 1, 200, 2000, 100, 210));
bands.Add(new Band(7, 7, 1, 200, 2000, 100, 192));
bands.Add(new Band(8, 8, 1, 200, 2000, 100, 178));
bands.Add(new Band(9, 9, 1, 200, 2000, 100, 167));
bands.Add(new Band(10, 10, 1, 200, 2000, 100, 158));
bands.Add(new Band(11, 11, 1, 200, 2000, 100, 150.5));
bands.Add(new Band(12, 12, 1, 200, 999, 100, 140));
bands.Add(new Band(12, 18, 3, 1000, 3000, 100, 71.3));
bands.Add(new Band(24, 24, 6, 1000, 3000, 100, 71.3));
重要的列为4和5 -第一个波段值为100和199。
目前,我有一个查询,该查询根据一个参数选择一个或多个频段:
public static IEnumerable<Quote> ForAmount(int amount)
{
return Repository.Bands
.Where(x => amount >= x.MinAmount && amount <= x.MaxAmount)
.YieldTerms(amount); // this does something with the selected data
}
但是,我想拉出属于低频段和高频段的频段。
新签名:
public static IEnumerable<Quote> ForAmount(int lowAmount, int highAmount)
{
// Query
}
例如,低= 100,高= 500。
给出示例的高/低值,将选择以下波段(100-500与100-199重叠)。
bands.Add(new Band(1, 12, 1, 100, 199, 100, 292));
以下波段(100-500与200-2000重叠)也会如此。
bands.Add(new Band(1, 5, 1, 200, 1000, 100, 292));
我敢肯定,这很容易做到,但是我现在脑中有雾气,所以任何帮助都值得赞赏。
答案 0 :(得分:2)
Repository.Bands
.Where(x => x.MinAmount <= High && x.MaxAmount >= Low)
应该做
答案 1 :(得分:0)
我在dotnet提琴中演示了与您的示例相似的内容; https://dotnetfiddle.net/dHr2Nn
这应该工作。
public static IEnumerable<Quote> ForAmount(int lowAmount, int highAmount)
{
return Repository.Bands
.Where(x => x.MinAmount <= highAmount && x.MinAmount >= lowAmount)
|| (x.MaxAmount >= lowAmount && x.MaxAmount <= highAmount))
.YieldTerms(...); // this does something with the selected data
}