2

在我的 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.From 编写该语句...

4

2 回答 2

1

您是否尝试过 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}")
于 2013-10-04T21:19:40.887 回答
0

你最好的选择是underscore.js

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

还有JSLINQ遵循命名更像 LINQ。

这就是我要用下划线写的:

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

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

于 2013-10-04T21:15:01.270 回答