Редактировать:
Вы изменили свой ОП, указав, что можете использовать функцию этажа, но хотите узнать о группировке по умолчанию.
Математическифункция пола эквивалентна.В случае потолка нижняя граница для данных, которые они использовали, предположительно равна 0. В случае этажа логическая верхняя граница равна положительной бесконечности (фактически она заканчивается как самое высокое значение, которое поддерживает БД, поскольку целые числа не поддерживаютпонятие бесконечности).Он доставит вас туда, куда вы хотите.
Если вы хотите что-то, что может быть более применимо к другим ситуациям, вы можете попробовать что-то вроде этого:
items.GroupBy(item =>
(
floors.FirstOrDefault(floor => floor <= item)
?? "Default"
)
.ToString()
);
Возможно, это не сработаетв Linq для NHibernate, так как я не думаю, что это будет соответствовать карте SQL.Вместо этого вы можете сначала импортировать весь набор в память (.ToList()
), а затем добавить свою группировку в качестве запроса Linq to Objects.
Не имеет смысла использовать его в этой ситуации,но это может произойти в случае группировок без нумерации строк:
var groups = new HashSet<string>
{
"Orange",
"Green",
"Mauve",
};
items.GroupBy(item =>
groups.Contains(item.Color)
? item.Color
: "Default"
);
Перед редактированием:
Вы можете просто изменить логику, и вы автоматически включитевсе ниже определенного значения.
var floors = new[] { 250, 100, 50, 0 };
var groupings = items.GroupBy(item => floors.First(floor => floor <= item));
Как это работает:
Возьмите предмет 270
.
Первым элементом в списке будет первое ведро, в которое он попадет.Это связано с тем, что 250 <= 270
.
Возьмите предмет 99
.
Третьим элементом в списке будет первое ведро, в которое он попадет.250
не менее 99
.100
не менее 99
.Но 50
меньше 99
.
Элемент 50
попадет в третье ведро.
Он меньше 250
и 100
,но равно 50
.
Не совсем соответствует описанию в вашем вопросе:
Описание вашей группы несколько не корректно.Вы должны были бы объединить их отдельно, чтобы этот алгоритм работал.Было бы ведро 0-50
, ведро 51-100
и т. Д. Или ведро 0-49
, ведро 50-99
и т. Д.
ведро 0-50
и ведро 50-100
не существует вместе.