2014-09-21 69 views
0

一个分组集合多数民众赞成在不工作的代码:ORDERBY在linq.js

var grouping = Enumerable.from(periods) 
        .select(function(p){return new PeriodViewModel(p)}) 
        .groupBy("$.periodNumber") 
        .orderBy("$.date") 
        .toArray(); 

的periodviewmodels被periodNumber分组和日期应由日期进行排序上升,但是这不会发生,我猜猜它是因为orderBy中的选择器应该以某种方式引用分组结果...

我不知道。这是测试数据,所以你可以尝试自己:

{ 
    "periods": [ 
     { 
      "id": 1, 
      "content": "this is not a test", 
      "date": 1, 
      "periodNumber": 1, 
      "documents": [ 
       { 
        "name": "Homework.doc" 
       }, 
       { 
        "name": "Todo.xls" 
       } 
      ] 
     }, 
     { 
      "id": 3, 
      "content": "this might be a test", 
      "date": 2, 
      "periodNumber": 1, 
      "documents": [ 
       { 
        "name": "Homework.doc" 
       }, 
       { 
        "name": "Todo.xls" 
       } 
      ] 
     }, 
     { 
      "id": 5, 
      "content": "This is a clause", 
      "date": 3, 
      "periodNumber": 1, 
      "documents": [ 
       { 
        "name": "Homework.doc" 
       }, 
       { 
        "name": "Todo.xls" 
       } 
      ] 
     }, 
     { 
      "id": 1, 
      "content": "and not sth to share for all", 
      "date": 5, 
      "periodNumber": 2, 
      "documents": [ 
       { 
        "name": "Homework.doc" 
       }, 
       { 
        "name": "Todo.xls" 
       } 
      ] 
     }, 
     { 
      "id": 2, 
      "content": "hello kitty???", 
      "date": 2, 
      "periodNumber": 3, 
      "documents": [ 
       { 
        "name": "Homework.doc" 
       }, 
       { 
        "name": "Todo.xls" 
       } 
      ] 
     }, 
     { 
      "id": 1, 
      "content": "Flynnie winnie", 
      "date": 1, 
      "periodNumber": 3, 
      "documents": [ 
       { 
        "name": "Homework.doc" 
       }, 
       { 
        "name": "Todo.xls" 
       } 
      ] 
     }, 
     { 
      "id": 1, 
      "content": "what do yo say about chol and ra?", 
      "date": 1, 
      "periodNumber": 4, 
      "documents": [ 
       { 
        "name": "Homework.doc" 
       }, 
       { 
        "name": "Todo.xls" 
       } 
      ] 
     } 
    ] 
} 

回答

0

排序项目之前,你分组他们。您无法从群组中访问date

var query = Enumerable.from(periods) 
    .select(function (p){ return new PeriodViewModel(p); }) 
    .orderBy("$.date") 
    .groupBy("$.periodNumber") 
    .toArray(); 
+0

哈哈,我也想过,但后来我认为订单不是由该组保存......也许...应该尝试过! – Elisabeth 2014-09-22 14:51:02

+0

我不知道这是否在任何规范中,但是我使用的所有linq实现在分组时保留顺序。可能是因为保持这个订单更容易。项目在处理时被抛入一个组中,通常作为一个列表/数组。使用不保存顺序的集合是没有意义的。 – 2014-09-22 15:28:27

+0

原来指定:[Enumerable.GroupBy()](http://msdn.microsoft.com/en-us/library/vstudio/bb534501%28v=vs.100%29.aspx#remarksToggle)。 “IGrouping ”对象是根据产生每个“IGrouping ”的第一个键的源元素的顺序产生的。分组中的元素按顺序产生他们出现在源头上。“换句话说,组中的组和项目在从源集合处理时是有序的。 – 2014-09-23 05:16:19