0

我正在尝试使用 linq.js 表达式分配一个值。linq lamba 表达式将是这样的:

List<SearchSpaceRoom> roomsAvailable = Spaces.Select(s => 
   { 
       s.Available = s.Rooms.Where(r => r.RoomTypeRanges.Any(t => t.Type.ToString() == "Theatre" && t.Min <= 101 && 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 + '\' && $.Min <= \'' + parseInt(minDelegates) + '\' && 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; }
}
4

1 回答 1

0

为了解决这个问题,我设法混合使用了 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 + '\' && $.Min <= ' + intMin + ' && $.Max >= ' + intMax)) {
                    count++;
                }
            });
            space.Available = count;
        });

        return results;
    }

我确信有更优雅的解决方案,但它似乎工作正常。

于 2016-10-07T10:18:37.157 回答