将Javascript Reduce函数转换为C#
我正在尝试将此函数从Javascript转换为C#。 目标是接收一个合同列表,并将其排序为子组,如果它们具有相同的客户机,则将其捆绑将Javascript Reduce函数转换为C#,javascript,c#,arrays,entity-framework,jsonresult,Javascript,C#,Arrays,Entity Framework,Jsonresult,我正在尝试将此函数从Javascript转换为C#。 目标是接收一个合同列表,并将其排序为子组,如果它们具有相同的客户机,则将其捆绑 > let c1 = {id:1,name:"c1"} > let c2 = {id:2,name:"c2"} > let c3 = {id:2,name:"c3"} > let c4 = {id:1,name:"c4"} > let c5 = {id:3,name:"c5"} > let list = [c1,c2,
> let c1 = {id:1,name:"c1"}
> let c2 = {id:2,name:"c2"}
> let c3 = {id:2,name:"c3"}
> let c4 = {id:1,name:"c4"}
> let c5 = {id:3,name:"c5"}
> let list = [c1,c2,c3,c4,c5]
>
> const groupByKey = (array, property) => { return
> array.reduce((accumulator, object) => {
> const key = object[property];
>
> if (!accumulator[key]) {
> accumulator[key] = []
> }
> accumulator[key].push(object)
> return accumulator; }, {}) }
>
> groupByKey(list, "id")
>
> // input = let list = [c1,c2,c3,c4,c5] //output =
> {"1":[{"id":1,"name":"c1"},{"id":1,"name":"c4"}],"2":[{"id":2,"name":"c2"},{"id":2,"name":"c3"}],"3":[{"id":3,"name":"c5"}]}
//输出最好是包含捆绑合同的列表列表
更新:
我已经编写了这个函数,问题是我只需要返回合同ID,而不是整个对象
desired output [[c1.id,c4.id],[c2.id,c3.id],[c5.id]]
这就是我现在拥有的
public JsonResult checkForSameClient(long[] listOfContracts)
{
// here i grab the list of contracts ids then go to my repository and find //the whole objects to be compared.
IQueryable<ContratEspace> contrats = contratEspaceRepository.Get(1, listOfContracts.Count(), listOfContracts);
var contratList = contrats.ToList();
var finalArray = contrats.GroupBy(c => c.id_clientGestion).ToList();
return new JsonResult() { Data = finalArray };
}
public JsonResult checkForSameClient(长[]个合同列表)
{
//在这里,我获取合同ID列表,然后转到我的存储库,查找//要比较的整个对象。
IQueryable contracts=contractespacerepository.Get(1,listOfContracts.Count(),listOfContracts);
var contratList=contrats.ToList();
var finalArray=contrats.GroupBy(c=>c.id_clientGestion.ToList();
返回新的JsonResult(){Data=finalArray};
}
但这并没有正确返回Json.Data,我有一个错误:
SyntaxError: Unexpected token < in JSON at position 0
at JSON.parse (<anonymous>)
at fromJson (angular.js:1282)
at defaultHttpResponseTransform (angular.js:10133)
at angular.js:10224
at forEach (angular.js:321)
at transformData (angular.js:10223)
at transformResponse (angular.js:10996)
at processQueue (angular.js:15552)
at angular.js:15568
at Scope.$eval (angular.js:16820)
SyntaxError:JSON中位置0处的意外标记<
在JSON.parse()处
在fromJson(angular.js:1282)
在defaultHttpResponseTransform(angular.js:10133)
在angular.js:10224
在forEach(angular.js:321)
在transformData(angular.js:10223)
在transformResponse(angular.js:10996)
在processQueue(angular.js:15552)
在angular.js:15568
范围为$eval(angular.js:16820)
由于GroupBy内置于.NET中,因此无需编写聚合函数
如何在C#中对列表进行分组:
lambda函数x=>x.Id
可以根据您的需要进行定制
由于GroupBy是在.NET中内置的,因此无需编写聚合函数 如何在C#中对列表进行分组: lambda函数
x=>x.Id
可以根据您的需要进行定制
到目前为止您尝试了什么?与javascript
array.reduce(…)
相对应的.NET是可枚举的.Aggregate(…)
我尝试转换为.Aggregate,但无法以同样的方式工作。另外,尝试使用GroupBy()来尝试简化。我用普通语法编写了一个嵌套循环,但它没有给我所需的输出。JSON中位于位置0的新语法错误SyntaxError:Unexpected token<不应该与GroupBy(…)
相关。在某些情况下,对后端控制器的调用不会返回json。可能是控制器因某些异常而崩溃,并返回一些一般错误页面。如果可能,尝试从Chrome或其他web浏览器调用后端控制器方法。到目前为止,您尝试了什么?与javascriptarray.reduce(…)
对应的.NET是Enumerable.Aggregate(…)
我尝试转换为.Aggregate,但无法以同样的方式工作。另外,尝试使用GroupBy()来尝试简化。我用普通语法编写了一个嵌套循环,但它没有给我所需的输出。JSON中位于位置0的新语法错误SyntaxError:Unexpected token<不应该与GroupBy(…)
相关。在某些情况下,对后端控制器的调用不会返回json。可能是控制器因某些异常而崩溃,并返回一些一般错误页面。如果可能,尝试从Chrome或其他web浏览器调用后端控制器方法。
var list = new [] {
new { Id = 1, Name = "c1"},
new { Id = 2, Name = "c2"},
new { Id = 2, Name = "c3"},
new { Id = 1, Name = "c4"},
new { Id = 3, Name = "c5"},
};
var grouped = list.GroupBy(x => x.Id);