我有一个由某个查询设置的 ADO.NET 数据集,比如说
SELECT ID,USER,PRODUCT,COUNT FROM PRODUCTION
在不使用 where 子句的情况下,我需要从数据集中得出一些结果。假设我想获取产品数量最多的用户的用户和产品数量。(我想通过使用现有的数据集来做到这一点。我不能从数据集中得到它。)
知道在数据集中查询的方法吗?由于有数据表,我的想法是有一些方法可以查询它。
我有一个由某个查询设置的 ADO.NET 数据集,比如说
SELECT ID,USER,PRODUCT,COUNT FROM PRODUCTION
在不使用 where 子句的情况下,我需要从数据集中得出一些结果。假设我想获取产品数量最多的用户的用户和产品数量。(我想通过使用现有的数据集来做到这一点。我不能从数据集中得到它。)
知道在数据集中查询的方法吗?由于有数据表,我的想法是有一些方法可以查询它。
传统的 SQL 查询不能应用于 DataSet。然而,以下是可能的:
DataTable.Select
。有关DataTables 中表达式的详细信息,请参见此处。DataTable.Compute
。Quick-and-dirty LINQ 示例:(它不返回 DataTable,而是一个包含匿名类型的列表):
var joinedResult = dataTable1
// filtering:
.Select("MyColumn = 'value'")
// joining tables:
.Join(
dataTable2.AsEnumerable(),
row => row.Field<long>("PrimaryKeyField"),
row => row.Field<long?>("ForeignKeyField"),
// selecting a custom result:
(row1, row2) => new { AnotherColumn = row1.Field<string>("AnotherColumn") });
AsEnumerable
将 DataTable 转换为IEnumerable
可以对其执行 LINQ 查询的。如果您是 LINQ 新手,请查看此介绍。
是的,您可以使用DataTable.Select方法。
DataTable table = DataSet1.Tables["Orders"];
// Presuming the DataTable has a column named Date.
string expression;
expression = "Date > #1/1/00#";
DataRow[] foundRows;
// Use the Select method to find all rows matching the filter.
foundRows = table.Select(expression);
// Print column 0 of each returned row.
for(int i = 0; i < foundRows.Length; i ++)
{
Console.WriteLine(foundRows[i][0]);
}
另请参阅此链接。
您可以使用 LINQ to DataSet 对 Dataset 对象进行跨表查询: