2015-08-23 34 views
1

我有以下的GroupBy查詢:可能出現的空LINQ的GroupBy對象值

var groups = ordered.GroupBy(k => new 
     { 
      a = k[SelectedFirstCategory], 
      b = k[SelectedSecondCategory], 
      c = k[SelectedThirdCategory] 
     }); 

的問題是,分類可以爲空。

如何修改我的GroupBy以適應此操作。我知道我可以與多個「如果」一起去,但這對我來說並不優雅。

爲了使這個更清晰一個例子將是,如果SelectedSecondCategory爲空,但其他都是結果分組應該根據「a」和「c」屬性填充。 我想到了空成膜助劑是這樣的:

a = SelectedFirstCategory != null ? k[SelectedFirstCategory] : DON'T KNOW WHAT TU PUT HERE. 

替代值應該是這將是無關的GROUPBY。

在此先感謝。

+0

你想達到什麼目前還不清楚。如果對於一個項目a = 1,b = 2,c = 1,並且對於第二個a = 1,b = null,c = 1比它們應該在同一組中還是不存在? – bumpy

+0

「SelectedFirstCategory」的類型是什麼? – Yoav

回答

0

使用助手方法,請注意您的分組可能沒有任何意義。假設你有列是「水果」,「顏色」,「形狀」。用[「香蕉」,「橢圓形」]對[「蘋果」,「紅色」,「圓形」]進行分組並不會帶來好的結果。

 static void Main(string[] args) 
     { 
      List<List<object>> ordered = new List<List<object>>(); 
      int SelectedFirstCategory = 1; 
      int SelectedSecondCategory = 2; 
      int SelectedThirdCategory = 3; 

      var groups = ordered.GroupBy(k => MyGroup(
       k[SelectedFirstCategory], 
       k[SelectedSecondCategory], 
       k[SelectedThirdCategory]) 
      ); 
     } 
     static List<object> MyGroup(object a, object b, object c) 
     { 
      List<object> results = new List<object>(); 
      if (a != null) results.Add(a); 
      if (b != null) results.Add(b); 
      if (c != null) results.Add(c); 

      return results; 

     }​ 
+0

在這裏使用列表總是給我不正確的分組 – RobertPorter

+0

這就是我說的。 [a,null,c]不同於[a,c] – jdweng

+0

你說[a,b,c]不同於[a,c]。但是排序[a,c]或[a,c,null]給了我相同的結果。 – RobertPorter

2

我看來是很簡單:

var groups = ordered.GroupBy(k => new { 
      a = !String.IsNullOrEmpty(SelectedFirstCategory) ? k[SelectedFirstCategory] : null, 
      b = !String.IsNullOrEmpty(SelectedSecondCategory) ? k[SelectedSecondCategory] : null, 
      c = !String.IsNullOrEmpty(SelectedThirdCategory) ? k[SelectedThirdCategory] : null 
     }); 

看來,如果分組的一些參數爲空創建組時,所以這就是我想它是不是考慮。