我想在Group BY之后总计所有TotalImages列,但它的'告诉我错误。 任何能帮助我解决问题的人。 请记住只想使用此语法库并希望DataTable不是List。如果有人帮助我,请感激不尽。
示例数据: -
CountryId | CItyId | TotalImages
1 1 2
1 2 2
1 2 3
1 3 4
2 1 2
2 2 2
2 2 3
2 3 4
DataTable dt = dt.AsEnumerable()
.GroupBy(r => new { Col1 = r["CountryId"], Col2 = r["CityId"]})
.Select(g => g.Sum(r => r["TotalImages"]).First())
.CopyToDataTable();
答案 0 :(得分:0)
您可以使用: -
DataTable countriesTable = dt.AsEnumerable().GroupBy(x => new { CountryId = x.Field<int>("CountryId"), CityId = x.Field<int>("CityId") })
.Select(x => new Countries
{
CountryId = x.Key.CountryId,
CityId = x.Key.CityId,
TotalSum = x.Sum(z => z.Field<int>("TotalImages"))
}).PropertiesToDataTable<Countries>();
我得到了以下输出: -
由于我们无法对匿名类型使用CopyToDataTable
方法,因此我使用了从here获取的扩展方法并对其进行了相应的修改。
public static DataTable PropertiesToDataTable<T>(this IEnumerable<T> source)
{
DataTable dt = new DataTable();
var props = TypeDescriptor.GetProperties(typeof(T));
foreach (PropertyDescriptor prop in props)
{
DataColumn dc = dt.Columns.Add(prop.Name, prop.PropertyType);
dc.Caption = prop.DisplayName;
dc.ReadOnly = prop.IsReadOnly;
}
foreach (T item in source)
{
DataRow dr = dt.NewRow();
foreach (PropertyDescriptor prop in props)
{
dr[prop.Name] = prop.GetValue(item);
}
dt.Rows.Add(dr);
}
return dt;
}
而且,这是Countries
类型: -
public class Countries
{
public int CountryId { get; set; }
public int CityId { get; set; }
public int TotalSum { get; set; }
}
如果愿意,您可以使用任何其他方法将其转换为DataTable。