Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Javascript Reduce函数转换为C#_Javascript_C#_Arrays_Entity Framework_Jsonresult - Fatal编程技术网

将Javascript Reduce函数转换为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,

我正在尝试将此函数从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,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浏览器调用后端控制器方法。到目前为止,您尝试了什么?与javascript
array.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);