用 JavaScript 编写类似 LINQ 查询的语句

本文关键字:LINQ 查询 语句 JavaScript | 更新日期: 2023-09-27 18:33:44

在我的javascript文件中,我想使用linq querylike语句显示我的结果。以下是我的视图模型和有关如何获取信息的信息。

var viewModel = {
    RosterRoleTypes: ko.observableArray([])
};
// the ViewModel for the array of RoleTypes
var roleTypesViewModel = function (data) {
    roleTypesViewModel.AddRoles(data);
}
// Adds multiple roles to the array of RoleTypes
roleTypesViewModel.AddRoles = function (data) {
    $.each(data, function (index, value) {
        roleTypesViewModel.PushRole(value);
    });
};
//Add a single role to the array of Roles
roleTypesViewModel.PushRole = function (role) {
    viewModel.RosterRoleTypes.push(new roleViewModel(role));
}
// the ViewModel for a single Role
var roleViewModel = function (data) {
    var _self = this;
    _self.ContentRole = ko.observable(data.ContentRole);
    _self.RoleName = ko.observable(data.RoleName);
    _self.RoleRank = ko.observable(data.RoleRank);
    _self.UserCount = ko.observable(data.UserCount);
};

在 get 方法的OnSuccess中,我想执行以下操作:

var results = Enumerable.From(viewModel)
    .ForEach(RoleTypes){ show RoleName and UserCount}

我怎样才能使用 Enumerable.From...

用 JavaScript 编写类似 LINQ 查询的语句

你试过 LINQ 吗.js听起来正是你要找的。你可以在这里找到它: http://linqjs.codeplex.com/

以下是他们网站上的一些示例:

// C# LINQ (delegate)
Enumerable.Range(1, 10)
    .Where(delegate(int i) { return i % 3 == 0; })
    .Select(delegate(int i) { return i * 10; });
// linq.js - anonymous function
Enumerable.Range(1, 10)
    .Where(function(i) { return i % 3 == 0; })
    .Select(function(i) { return i * 10; });
// C# LINQ (lambda)
Enumerable.Range(1, 10).Where(i => i % 3 == 0).Select(i => i * 10);
// linq.js - lambda expression
Enumerable.Range(1, 10).Where("i => i % 3 == 0").Select("i => i * 10");
// $ is default iterator variable like Scala's "_" or Groovy's "it"
Enumerable.Range(1, 10).Where("$ % 3 == 0").Select("$ * 10");
 // "" is shorthand of "x => x" (identity function)
Enumerable.Range(4, 7).Join(Enumerable.Range(8, 5), "", "", "outer,inner=>outer*inner");
// Enumerable.From is wrap from primitive array, string(to charArray), object(to KeyValuePair[]) etc..
var array = [100, 200, 30, 40, 500, 40, 200];
var ex1 = Enumerable.From(array).Distinct().ToArray(); // [100, 200, 30, 40, 500]
var ex2 = Enumerable.From("foobar").ToArray(); // ["f", "o", "o", "b", "a", "r"];
var ex3 = Enumerable.From({foo:10, bar:20}).ToArray(); // [{Key:"foo",Value:10}, {Key:"bar",Value:20}]
// C# - AnonymousType
array.Select((val, i) => new { Value = val, Index = i });
// linq.js - object literal
Enumerable.From(array).Select("val,i=>{Value:val, Index:i}")

你最好的选择是下划线.js

虽然从一开始就不清楚,但你可以链接函数调用。

还有JSLINQ,它的命名更像LINQ。

这是我用下划线写的:

_.(viewModel.RosterRoleTypes()).each(function(item){
 console.log(item.RoleName());
 console.log(item.UserCount());
});

但是如果你只想迭代项目,你甚至可以使用 Jquery $.each