2011-03-31 28 views
3

我有被规定的查询中设置一个ADO.NET数据集里面, 说查询数据集C#

SELECT ID,USER,PRODUCT,COUNT FROM PRODUCTION 

,不使用where子句我需要获得从数据集的一些结果。假设我想获得具有最大产品数量的用户的用户和产品数量。 (我想通过使用现有的数据集来做到这一点,但我无法从数据集中得出这个结论。)

任何有关在数据集内部查询的方法的想法?由于有Datatables,我认为有一些方法可以查询它。

+1

'DataTable.Compute'是最好的,当你需要'COUNT(*)'或'MAX(COUNT) '像操作 – 2011-03-31 06:20:05

回答

8

传统SQL查询无法应用于DataSet。下面可能的,但是:使用DataTable.Select

  • 过滤行。有关DataTable中的表达式的详细信息,请参阅here
  • 使用DataTable.Compute来计算总计等。
  • 如果这两个都不行,总会有LINQ。

快速和脏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的新手,请查看this introduction

+2

+1 *可能可能的解决方案! – 2011-03-31 06:19:37

2

是的,您可以使用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]); 
    } 

另请参阅this link

+0

如何获得最大数量......我的意思是我不能拥有像“SELECT COUNT(*)FROM ....”那样的高级查询。“ – JCTLK 2011-03-31 05:24:39

+1

您可以使用.Length来计数。对于更高级的使用Linq - http://msdn.microsoft.com/en-us/library/bb387004.aspx – Anuraj 2011-03-31 06:01:24

+1

@JCTLK:这里是你如何计数:'.Expression =“Count(OrderID)”'。探索['DataColumn.Expression'](http://msdn.microsoft.com/zh-cn/library/cabd21yw%28vs.71%29.aspx)属性。 – 2011-03-31 06:17:30