Linq to linq.js 带有赋值的翻译
Linq to linq.js translation with value assignation
我正在尝试用 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();
这可能吗,有人可以建议我最好的方法吗?
如果您需要有关表达式的更多信息:
就是为每个space分配一定布局(教室,剧院)满足最小和最大人数要求的房间数量。
基本结构如下:
- 一个 space 包含房间
- 一个房间包含不同的布局
- 布局包含最多和最少的人
如果你需要,我可以提供所有的数据结构,但我相信这只会带来更多的困惑而不是帮助。
谢谢!
编辑:我在此处添加 类
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; }
}
为了结束这个,我设法混合使用 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;
}
我相信还有更优雅的解决方案,但它似乎工作正常。
我正在尝试用 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();
这可能吗,有人可以建议我最好的方法吗?
如果您需要有关表达式的更多信息: 就是为每个space分配一定布局(教室,剧院)满足最小和最大人数要求的房间数量。 基本结构如下:
- 一个 space 包含房间
- 一个房间包含不同的布局
- 布局包含最多和最少的人
如果你需要,我可以提供所有的数据结构,但我相信这只会带来更多的困惑而不是帮助。
谢谢!
编辑:我在此处添加 类
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; }
}
为了结束这个,我设法混合使用 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;
}
我相信还有更优雅的解决方案,但它似乎工作正常。