Linq для linq.js перевод с присвоением значения

#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();
  

Возможно ли это, может ли кто-нибудь предложить мне наилучший подход для этого?

Если вам нужна дополнительная информация о выражении: это назначение количества комнат, соответствующего требованиям минимального и максимального количества людей для определенного макета (класс, театр) для каждого пространства. Базовая структура похожа:

  1. Одно пространство содержит номера
  2. Одна комната содержит разные макеты
  3. Макет содержит максимальное и минимальное количество людей

Я могу предоставить всю структуру данных, если вам нужно, но я считаю, что это больше запутает, чем поможет.

Спасибо!

РЕДАКТИРОВАТЬ: я добавляю классы здесь

 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;
    }
  

Я уверен, что есть более элегантные решения, но, похоже, они работают нормально.