我有一个数据表,如下所示,
我有一个返回列表的服务,
我想使用linq对具有不同rowid和字段名称的数据进行分组并将它们放入 单独的清单。我怎么能实现它?
这是我按ID分组的代码
var query = ae.Result.CommonDataValues.GroupBy(item => item.RowID)
.Select(g => g.Max(item => item.ID));
答案 0 :(得分:0)
为什么不使用linq GroupBy,然后使用ForEach?
如下所示;
// Group the result by rowId finalData.GroupBy(x => x.rowid).ForEach(group => { // Group would be the items which you are after... // Do your logic here? });
您可以通过在项目中添加此扩展来创建ForEach IEnumerable函数;
public static void ForEach(this IEnumerable enumeration, Action action) { foreach(T item in enumeration) { action(item); } }
您可以通过访问ForEach中的组变量来获取您的MAX等,以及您所有的一切......它应该适合您。
答案 1 :(得分:0)
假设你想要/有一个映射这些属性的类,如:
public class Data
{
public int ID { get; set; }
public int RecordID { get; set; }
public int RecordFieldData { get; set; }
public int RowID { get; set; }
public int FieldID { get; set; }
public string FieldName { get; set; }
}
并且您希望List<List<Data>>
包含List<Data>
的每个唯一RowID
+ FieldName
组合,您可以GroupBy
匿名类型:
List<List<Data>> allData = data.AsEnumerable()
.GroupBy(r => new { RowID = r.Field<int>("RowID"), FieldName = r.Field<string>("FieldName") })
.Select(g => g
.Select(r => new Data
{
RowID = g.Key.RowID,
FieldName = g.Key.FieldName,
FieldID = r.Field<int>("RowID"),
ID = r.Field<int>("ID"),
RecordFieldData = r.Field<int>("RecordFieldData"),
RecordID = r.Field<int>("RecordID")
})
.ToList())
.ToList();
如果您想使用Dictionary
代替RowId
+ FieldName
作为关键字:
Dictionary<Tuple<int, string>, List<Data>> allData = data.AsEnumerable()
.GroupBy(r => new { RowID = r.Field<int>("RowID"), FieldName = r.Field<string>("FieldName") })
.ToDictionary(
g => Tuple.Create(g.Key.RowID, g.Key.FieldName),
g => g.Select(r => new Data
{
RowID = g.Key.RowID,
FieldName = g.Key.FieldName,
FieldID = r.Field<int>("RowID"),
ID = r.Field<int>("ID"),
RecordFieldData = r.Field<int>("RecordFieldData"),
RecordID = r.Field<int>("RecordID")
})
.ToList());
// lookup with RowId + FieldName, f.e.:
List<Data> datas;
if(allData.TryGetValue(Tuple.Create(1, "name"), out datas))
{
// dictionary contains this data
}
答案 2 :(得分:0)
另一种变体
var query = from cdv in ae.Result.CommonDataValues
group cdv by new {cdv.RowID, cdv.FieldName} into g
select g.ToList()
如果你只想为一个领域灌浆,你可以试试这个
var query = from cdv in ae.Result.CommonDataValues
group cdv by new cdv.RowID into g
select g.ToList()