C# 使用GROUP BY功能在ADO.NET中聚合函数
这是一个更直接的问题,源于之前的一个问题,因为我花了更多的时间研究ADO.NET 我想获取一个ADO.NET数据表,并对某些列使用聚合函数(如SUM)执行与SQL SELECT查询等效的查询,对其余列使用GROUP BY set。然后我想获取结果并将其显示在数据网格中 我知道我可以创建包含筛选条件和聚合函数的DataTable的DataView。但是政府说 如果使用单个表创建聚合,则不会有分组依据功能。相反,所有行在列中显示相同的值C# 使用GROUP BY功能在ADO.NET中聚合函数,c#,ado.net,group-by,dataview,aggregate-functions,C#,Ado.net,Group By,Dataview,Aggregate Functions,这是一个更直接的问题,源于之前的一个问题,因为我花了更多的时间研究ADO.NET 我想获取一个ADO.NET数据表,并对某些列使用聚合函数(如SUM)执行与SQL SELECT查询等效的查询,对其余列使用GROUP BY set。然后我想获取结果并将其显示在数据网格中 我知道我可以创建包含筛选条件和聚合函数的DataTable的DataView。但是政府说 如果使用单个表创建聚合,则不会有分组依据功能。相反,所有行在列中显示相同的值 如何从ADO.NET中获得按类型分组功能,而无需将表写入单独的
如何从ADO.NET中获得按类型分组功能,而无需将表写入单独的数据库并在其中运行查询?有没有办法通过创建或使用第二个表来实现这一点?您可以使用LINQ的分组功能来实现这一点。此外,您可以将DataGrid绑定到LINQ查询,但数据将是只读的
对LINQ分组的web搜索应该可以帮助您找到要去的地方。一种解决方法是使用反射将LINQ查询结果转换为数据表。这里有一个例子。一旦有了DataTable,就有了完整的groupby、分页等功能
private static System.Data.DataTable ObjectArrayToDataTable(object[] data)
{
System.Data.DataTable dt = new System.Data.DataTable();
// if data is empty, return an empty table
if (data.Length == 0) return dt;
Type t = data[0].GetType();
System.Reflection.PropertyInfo[] piList = t.GetProperties();
foreach (System.Reflection.PropertyInfo p in piList)
{
dt.Columns.Add(new System.Data.DataColumn(p.Name, p.PropertyType));
}
object[] row = new object[piList.Length];
foreach (object obj in data)
{
int i = 0;
foreach (System.Reflection.PropertyInfo pi in piList)
{
row[i++] = pi.GetValue(obj, null);
}
dt.Rows.Add(row);
}
return dt;
}
internal static DataTable GetAllStoredFileDetailsByUserID(int userID)
{
var db = GetDataContext();
object[] result;
try
{
result = (from files in db.Files
where files.OwnerUserID == userID && files.IsThumbnail == false
select new
{
FileID = files.FileID,
Name = files.Name,
DateCreated = files.DateCreated,
Size = files.Size,
FileHits = (from act in db.FileWebActivities where act.FileID == files.FileID select act).Count()
}).ToArray();
}
catch (Exception)
{
//omitted
}
return ObjectArrayToDataTable(result);
}
以下是如何使用.NET 3.x及更高版本(LINQ)进行此操作: 这是如何使用.NET2.0及以下版本(标准ADP.NET)实现的
啊,我在想林克可能是答案。如果数据是只读的,这不是问题。谢谢仅仅指定URL并不是一个答案。今后请避免这样做。