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));
但結果是不羣。
你能告訴我如何按指數分組嗎?
最佳方面
你確實組數據,或者你命令它?另外:爲什麼你不把數據解析爲int值,並按此順序排序? – Marco 2014-09-23 09:55:13
_「那麼LINQ支持的當前組,它不能這樣做」_什麼不能LINQ做,爲什麼?什麼是期望的輸出? – 2014-09-23 09:55:15
Serv:數據類型是動態的,也許該列是DateTime,可能是int,或者是字符串...我是分組的,而不是順序。 TimSchmelter:組正常不能做,我的意思是我寫的類繼承IEqualityComparer。慾望輸出是第三個數據表。但是,目前我只是團體,慾望輸出是團體。但它運行後不是組。 – 2014-09-23 09:59:41