Linq:如何从对象数据中使用索引进行分组
本文关键字:索引 数据 对象 Linq | 更新日期: 2023-09-27 18:24:13
我有一个示例数据
---------------------------------------
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分组,它将变为:
---------------------------------------
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,每个数据都是object[],所以我写了一个类:
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));
但结果不是集体。
你能告诉我如何像那样按索引分组吗?
最佳考虑
我通过文章回答了这个问题:当LINQ执行查询时