2013-10-23 99 views
0

我有一個類的成分,其中有一個屬性Items的類型List<Ingredient>
在我的一個網頁,我使用一個GridView來顯示所有的成分,按首字母分組:LINQ查詢與按組和按升序排列不起作用

<Page.Resources> 
    <CollectionViewSource x:Name="IngredientsViewSource" IsSourceGrouped="True" ItemsPath="Items"/> 
</Page.Resources> 

加載頁面時,該CollectionViewSource的來源屬性設置是這樣的:

this.IngredientsViewSource.Source = CurrentData.Ingredients.GroupedItems; 

GroupedItems是要準備好使用的配料類,這需要以財產Items和訂單和羣體一切的屬性:

public object GroupedItems 
{ 
    get 
    { 
     if (this.Items != null) 
     { 
      return from IngredientIteration in this.Items 
         //orderby IngredientIteration.Name ascending 
         group IngredientIteration 
          by IngredientIteration.FirstLetter 
          into IngredientGroup 
          //orderby IngredientGroup.Key ascending 
          select new { 
             FirstLetter = IngredientGroup.Key, 
             Items = IngredientGroup 
             }; 
     } 
     else 
     { 
      return null; 
     } 
    } 
    private set { } 
} 

這是工作得很好。現在我想對結果進行排序,因爲現在第一個字母的順序都搞亂了。但是,當我刪除兩個orderby子句前面的註釋標記時,它變得非常奇怪。現在留下像這樣的orderby子句會導致正確排序的組,但只顯示每個組的第一個項目。
但是,當我改變升序爲降序時,一切都按預期工作:組按降序排序,顯示所有項目,並且項目在每個組內按降序排序。

這對我來說毫無意義,爲什麼要降職但升職不是?我在這裏錯過了什麼嗎?

+0

在我看來,你的'GroupedItems'將有'Items'作爲'IGrouping <...>',我懷疑這不是你想要的。 「GroupedItems」中每個條目的實際數據結構是什麼? –

+0

我想收集這些匿名對象的每個字符串'FirstLetter'和'List '' Items'。 –

回答

0

雖然正如你所描述的(降序作品,但升序不),它是如此奇怪。您的查詢有沒有什麼複雜的,我會用method syntax它和如你預期它應該工作:

public object GroupedItems { 
    get { 
    if (this.Items != null) 
    { 
     return Items.OrderBy(item=>item.Name) 
        .GroupBy(item=>item.FirstLetter) 
        .OrderBy(g=>g.Key) 
        .Select(g=> new { 
           FirstLetter = g.Key, 
           Items = g.ToList() 
          }).ToList(); 
    } 
    else { 
     return null; 
    } 
    } 
    private set { } 
}