#c# #linq #linq.js
#c# #linq #linq.js
Вопрос:
Я пытаюсь присвоить значение с помощью linq.js выражение. Выражение linq lamba будет выглядеть следующим образом:
List<SearchSpaceRoom> roomsAvailable = Spaces.Select(s =>
{
s.Available = s.Rooms.Where(r => r.RoomTypeRanges.Any(t => t.Type.ToString() == "Theatre" amp;amp; t.Min <= 101 amp;amp; t.Max >= 200)).Count();
return s;
})
.ToList();
Но я не могу найти способ сделать это для работы с linq.js . Идея состоит в том, чтобы иметь что-то вроде этого:
var data = eval($('#SpaceJson').val());
var results = $.Enumerable.From(data).ToArray();
var layout = 'Theatre';
var minDelegates = '101';
var maxDelegates = '200';
results = $.Enumerable.From(results)
.Select('{$.Available = $.Rooms.Where($.RoomTypeRanges.Any($.Type == '' layout '' amp;amp; $.Min <= '' parseInt(minDelegates) '' amp;amp; t.Max >= '' parseInt(maxDelegates) '')).Count(); return $; }').ToArray();
Возможно ли это, может ли кто-нибудь предложить мне наилучший подход для этого?
Если вам нужна дополнительная информация о выражении: это назначение количества комнат, соответствующего требованиям минимального и максимального количества людей для определенного макета (класс, театр) для каждого пространства. Базовая структура похожа:
- Одно пространство содержит номера
- Одна комната содержит разные макеты
- Макет содержит максимальное и минимальное количество людей
Я могу предоставить всю структуру данных, если вам нужно, но я считаю, что это больше запутает, чем поможет.
Спасибо!
РЕДАКТИРОВАТЬ: я добавляю классы здесь
public class SearchSpaceViewModel
{
public List<SearchSpaceRoom> Spaces { get; set; }
public string RoomsJson { get; set; }
}
public class SearchSpaceRoom
{
public List<RoomItem> Rooms { get; set; }
public int Available { get; set; }
.
.
.
}
public class RoomItem
{
public List<RoomTypeRange> RoomTypeRanges { get; set; }
.
.
.
}
public class RoomTypeRange
{
public string Type { get; set; }
public int Max { get; set; }
public int Min { get; set; }
}
Ответ №1:
Просто чтобы закрыть это, мне удалось сделать это, используя сочетание jQuery и linq.js:
function ParseJson() {
var data = eval($('#RoomsJson').val());
var results = $.Enumerable.From(data).ToArray();
var layout = 'Theatre';
var intMin = 101;
var intMax = 200;
$.each(results, function (i, space) {
var count = 0;
$.each(space.Rooms, function (j, room) {
if ($.Enumerable.From(room.RoomTypeRanges).Any('$.Type == '' layout '' amp;amp; $.Min <= ' intMin ' amp;amp; $.Max >= ' intMax)) {
count ;
}
});
space.Available = count;
});
return results;
}
Я уверен, что есть более элегантные решения, но, похоже, они работают нормально.