我从我的存储过程中获取数据
Brand Start End
----------------------------------------
Nike 0 4
Adidas 0 5
Nike 4 10
Levis 0 3
Adidas 5 8
我想要检查给定的起始数和结束号是否有任何范围数据,如果有任何特定范围的数据,我希望得到每个品牌的最大“结束”数。
例:假设我想检查一下在这种情况下是否有任何关于差距2到6的数据;
耐克的:耐克有0-4和4-10的范围.所以它在我的2-6范围内(2在0-4和6在4-10之间),所以我希望我的结果是"NIKE 10“。
为阿迪达斯:阿迪达斯的范围为0-5和5-8.因此,它也在2-6范围内(2在0-5和6在5-8之间),我希望它是“阿迪达斯8”。
for LEVIS: LEVIS有一个范围0-3,2在该范围内.所以我想要"LEVIS 3“
我为此编写了一个Linq查询,我希望确保它正常工作。
var result = (from items in responce.List
where items.Start>= 2 && items.End <= 6
group items by items.Brand into g
select new
{
Max = g.Max(x=> x.End)
});
结果应包含;
NIKE 10
ADIDAS 8
LEVIS 3
提前感谢
发布于 2017-04-30 19:10:14
你快到了,花了我一分钟时间来理解你想要的是什么,但你所要做的就是把你范围内的每个数字当作一个独立的值。
这意味着数据库范围可以在其值之间包含2、6或两者。
您所需要做的就是将linq重写为如下所示:
var result = from item in list
where (item.Start <= 2 && item.End >= 2) || (item.Start <= 6 && item.End >= 6)
group item by item.Brand into g
select new
{
Brand = g.Key,
Max = g.Max(x => x.End)
};
唯一的改变就是
where (item.Start <= 2 && item.End >= 2) || (item.Start <= 6 && item.End >= 6)
所有这些都是检查是否有任何范围有2或任何范围内有6。
有关完整的示例,请参阅此要旨。
编辑:
试一试,它应该始终显示品牌的最大范围,如果指定的值存在于该品牌内:
var result = (
from item in list
group item by item.Brand into g
from subItem in g
where (subItem.Start <= 2 && subItem.End >= 2) || (subItem.Start <= 6 && subItem.End >= 6)
select new
{
Brand = g.Key,
Max = g.Max(x => x.End)
}
).Distinct();
这是另一个使用更新的linq的gist。
发布于 2017-04-30 19:00:19
试试这个:
static void Main(string[] args)
{
List<Sneaker> sneakers = new List<Sneaker>() {
new Sneaker() { brand = "Nike", start = 0, end = 4},
new Sneaker() { brand = "Adidas", start = 0, end = 5},
new Sneaker() { brand = "Nike", start = 4, end = 10},
new Sneaker() { brand = "Levis", start = 0, end = 3},
new Sneaker() { brand = "Adidas", start = 5, end = 8}
};
int start = 2;
int end = 6;
var groups = sneakers.GroupBy(x => x.brand).Select(x => x.OrderBy(y => y.end)).Select(x => x.Any(y => y.end > end) ? x.FirstOrDefault(): x.LastOrDefault())
.Where(x => x != null).Select(x => new {brand = x.brand, end = x.end}).ToList();
}
https://stackoverflow.com/questions/43709210
复制相似问题