【问题标题】:Linq to linq.js translation with value assignation带有赋值的 Linq 到 linq.js 的翻译
【发布时间】:2016-10-05 15:09:00
【问题描述】:

我正在尝试使用 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();

这可能吗,有人可以建议我最好的方法吗?

如果您需要有关表达式的更多信息: 它是为每个空间分配一定的布局(教室,剧院)满足Min和Max人数要求的房间数量。 基本结构如下:

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

【问题讨论】:

    标签: c# linq linq.js


    【解决方案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 + '\' && $.Min <= ' + intMin + ' && $.Max >= ' + intMax)) {
                        count++;
                    }
                });
                space.Available = count;
            });
    
            return results;
        }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-26
      • 2019-08-15
      • 1970-01-01
      • 2017-06-25
      • 1970-01-01
      • 2012-07-10
      • 2012-06-09
      • 2015-09-08
      相关资源
      最近更新 更多