2014-09-23 54 views
1

我有一個示例數據的LINQ:如何從對象數據索引組

--------------------------------------- 
    Name | Old | Year | Address 
--------------------------------------- 
1. Ann  | 24 | 1990 | Address1 
--------------------------------------- 
2. Billy | 22 | 1992 | Address2 
--------------------------------------- 
3. Chris | 24 | 1990 | Address3 
--------------------------------------- 
4. Dean | 23 | 1991 | Address4 
--------------------------------------- 

的數據將顯示在像與標題列格:姓名,舊,年份,地址

數據具有類型:IList。每個項目都有類型:Object []

如果我組的名稱,它變成:

--------------------------------------- 
    Name | Old | Year | Address 
--------------------------------------- 
1. Ann  | 24 | 1990 | Address1 
--------------------------------------- 
2. Billy | 22 | 1992 | Address2 
--------------------------------------- 
3. Chris | 24 | 1990 | Address3 
--------------------------------------- 
4. Dean | 23 | 1991 | Address4 
--------------------------------------- 

如果我按年,它變成:

------------------------------------------------------ 
    Name   | Old | Year | Address 
------------------------------------------------------ 
1. Ann, Chris | 24 | 1990 | Address1, Address3 
------------------------------------------------------ 
2. Billy  | 22 | 1992 | Address2 
------------------------------------------------------ 
3. Dean   | 23 | 1991 | Address4 
------------------------------------------------------ 

所以目前基團LINQ的支持,它不能這樣做。 我的方法是:先按年份分組,然後手動操作數據。 我有列表索引用戶希望通過組:IList的,在這種情況下將2

因爲我的數據有IList的和他們每個人的對象是[],我寫了這樣一類:

 class GroupComparer : IEqualityComparer<object> 
     { 
      private IList<int> indexList; 

      public GroupComparer(IList<int> indexList) 
      { 
       this.indexList = indexList;  
      } 

      #region IEqualityComparer<object> Members 

      public bool Equals(object x, object y) 
      { 
       object[] arrX = (object[])x; 
       object[] arrY = (object[])y; 

       bool isEqual = true; 

       foreach (var item in this.indexList) 
       { 
        if(arrX[item] != arrY[item]) 
        { 
         isEqual = false; 
        } 
       } 

       return isEqual; 
      } 

      public int GetHashCode(object obj) 
      { 
       int hCode = 0; 
       object[] arrObj = (object[])obj; 

       foreach (var item in this.indexList) 
       { 
        hCode ^= (int)arrObj[item]; 
       } 

       return hCode.GetHashCode(); 
      } 

      #endregion 
     } 

那地方消耗它:

IList<object> data = ConvertToArrayObject(strDatas); 

    IList<int> index = new List<int>(); 
    index.Add(2); 

    var groups = data.GroupBy(p => p, new GroupComparer(index)); 

但結果是不羣。

你能告訴我如何按指數分組嗎?

最佳方面

+0

你確實組數據,或者你命令它?另外:爲什麼你不把數據解析爲int值,並按此順序排序? – Marco 2014-09-23 09:55:13

+1

_「那麼LINQ支持的當前組,它不能這樣做」_什麼不能LINQ做,爲什麼?什麼是期望的輸出? – 2014-09-23 09:55:15

+0

Serv:數據類型是動態的,也許該列是DateTime,可能是int,或者是字符串...我是分組的,而不是順序。 TimSchmelter:組正常不能做,我的意思是我寫的類繼承IEqualityComparer。慾望輸出是第三個數據表。但是,目前我只是團體,慾望輸出是團體。但它運行後不是組。 – 2014-09-23 09:59:41

回答

相關問題