C# 按可变上限值分组,使用LINQ到NHibernate最大值

C# 按可变上限值分组,使用LINQ到NHibernate最大值,c#,linq,linq-to-nhibernate,C#,Linq,Linq To Nhibernate,我想根据以下十进制类别构造一个LINQGroupBy语句:0-50、50-100、100-250、250以上。我发现它讨论了如何使用变量范围,但该查询有一个有限的上限。我的查询需要能够作为一个组处理超过250的所有内容。我尝试使用decimal.maxValue作为上限,但查询无法处理它,我想是因为该值大于NHibernate可以处理的值。理想情况下,我希望在不指定最大值的情况下执行此操作,以便查询独立于数据库 编辑:我很确定我可以通过使用楼层值数组并遵循链接中的模式来完成这项工作。但我很好奇,

我想根据以下十进制类别构造一个LINQGroupBy语句:0-50、50-100、100-250、250以上。我发现它讨论了如何使用变量范围,但该查询有一个有限的上限。我的查询需要能够作为一个组处理超过250的所有内容。我尝试使用decimal.maxValue作为上限,但查询无法处理它,我想是因为该值大于NHibernate可以处理的值。理想情况下,我希望在不指定最大值的情况下执行此操作,以便查询独立于数据库

编辑:我很确定我可以通过使用楼层值数组并遵循链接中的模式来完成这项工作。但我很好奇,是否有一种一网打尽的群体结构

编辑:

您将OP更改为可以使用楼层功能,但希望了解有关默认分组的信息

从数学上讲,楼层函数是等价的。在上限的情况下,他们使用的数据的下限可能是0。在floor的情况下,逻辑上界是正无穷大(实际上它是DB支持的最高值,因为整数不支持无穷大的概念)。它能让你到达你想去的地方

如果您想要更适用于其他情况的产品,可以尝试以下产品:

items.GroupBy(item =>
    (
        floors.FirstOrDefault(floor => floor <= item)
            ?? "Default"
        )
        .ToString()
    );
编辑前:

您可以简单地反转逻辑,自动包含低于某个值的所有内容

var floors = new[] { 250, 100, 50, 0 };
var groupings = items.GroupBy(item => floors.First(floor => floor <= item));
var-floors=new[]{250,100,50,0};

var groupings=items.GroupBy(item=>floors.First(floor=>floor)是的,我编辑了我的问题以反映我的想法。所以我想没有“默认值”按命令分组?我理解数学上的等价性。这更多的是LINQ语义的问题,即我可以用这种方式完成我的任务,而不是如何完成我的任务。但是你回答了,所以我将你的标记为已接受。谢谢。编辑:我实际上因为其他原因不得不首先提取整个对象集。但我实际上认为这不太清楚而不是一个隐含的上限!@Vish:编辑我的问题以反映你的需要。如果我需要澄清任何事情,请告诉我。不,那太好了。谢谢你这么通融。
var floors = new[] { 250, 100, 50, 0 };
var groupings = items.GroupBy(item => floors.First(floor => floor <= item));