我有被規定的查詢中設置一個ADO.NET數據集裏面, 說查詢數據集C#
SELECT ID,USER,PRODUCT,COUNT FROM PRODUCTION
,不使用where子句我需要獲得從數據集的一些結果。假設我想獲得具有最大產品數量的用戶的用戶和產品數量。 (我想通過使用現有的數據集來做到這一點,但我無法從數據集中得出這個結論。)
任何有關在數據集內部查詢的方法的想法?由於有Datatables,我認爲有一些方法可以查詢它。
我有被規定的查詢中設置一個ADO.NET數據集裏面, 說查詢數據集C#
SELECT ID,USER,PRODUCT,COUNT FROM PRODUCTION
,不使用where子句我需要獲得從數據集的一些結果。假設我想獲得具有最大產品數量的用戶的用戶和產品數量。 (我想通過使用現有的數據集來做到這一點,但我無法從數據集中得出這個結論。)
任何有關在數據集內部查詢的方法的想法?由於有Datatables,我認爲有一些方法可以查詢它。
傳統SQL查詢無法應用於DataSet。下面爲可能的,但是:使用DataTable.Select
DataTable.Compute
來計算總計等。快速和髒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。
+1 *可能可能的解決方案! – 2011-03-31 06:19:37
是的,您可以使用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。
如何獲得最大數量......我的意思是我不能擁有像「SELECT COUNT(*)FROM ....」那樣的高級查詢。「 – JCTLK 2011-03-31 05:24:39
您可以使用.Length來計數。對於更高級的使用Linq - http://msdn.microsoft.com/en-us/library/bb387004.aspx – Anuraj 2011-03-31 06:01:24
@JCTLK:這裏是你如何計數:'.Expression =「Count(OrderID)」'。探索['DataColumn.Expression'](http://msdn.microsoft.com/zh-cn/library/cabd21yw%28vs.71%29.aspx)屬性。 – 2011-03-31 06:17:30
你可以使用LINQ到數據集的數據集對象的交叉表查詢:
'DataTable.Compute'是最好的,當你需要'COUNT(*)'或'MAX(COUNT) '像操作 – 2011-03-31 06:20:05