C# 用javascript编写类似linq查询的语句

C# 用javascript编写类似linq查询的语句,c#,javascript,linq,knockout.js,C#,Javascript,Linq,Knockout.js,在我的javascript文件中,我希望使用类似linq查询的语句显示我的结果。 下面是我的视图模型和关于如何获取信息的信息 var viewModel = { RosterRoleTypes: ko.observableArray([]) }; // the ViewModel for the array of RoleTypes var roleTypesViewModel = function (data) { roleTypesViewModel.AddRoles(da

在我的javascript文件中,我希望使用类似linq查询的语句显示我的结果。 下面是我的视图模型和关于如何获取信息的信息

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);
};
在我的
OnSuccess
中,在get方法中,我希望执行以下操作:

var results = Enumerable.From(viewModel)
    .ForEach(RoleTypes){ show RoleName and UserCount}
如何使用Enumerable正确编写该语句。从…

您最好的选择是

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

还有一个更像LINQ的命名

这是我用下划线写的:

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

但是,如果您只想迭代这些项目,甚至可以使用Jquery$。每个

您都尝试过LINQ.js,它听起来正是您想要的。你可以在这里找到它:

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

// 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}")

我听说过javascript中的链接,但我不熟悉它。我的印象是,您可以将命令链接在一起,下一个命令将从第一个命令获取输出。可能是谷歌的js链接示例或其他什么