我怎樣才能得到它符合一定條件的數據表中的行號的數組?例如,我有一個「DateTime」列的數據表。我想檢索「DateTime」等於變量startTime的數據表的行號。使用LINQ得到的數據表的行數符合某些條件的
我知道如何獲取實際的行,但在數據表中的行的數量不限。
任何幫助將不勝感激:)
我怎樣才能得到它符合一定條件的數據表中的行號的數組?例如,我有一個「DateTime」列的數據表。我想檢索「DateTime」等於變量startTime的數據表的行號。使用LINQ得到的數據表的行數符合某些條件的
我知道如何獲取實際的行,但在數據表中的行的數量不限。
任何幫助將不勝感激:)
如果我讀的問題的權利,使用的Select
過載,使第二個輸入的索引可以爲你工作。像
var indices =
table.AsEnumerable()
.Select((row, index) => new { row, index })
.Where(item => item.row.Field<DateTime?>("DateTime") == startTime)
.Select(item => item.index)
.ToArray();
的東西,如果在該日期上的第一,第三,和第六行匹配時,該陣列將包含索引0,2和5可以,當然,在查詢如果加1後的每個索引你想行號從1(例如:.Select(item => item.index + 1)
)開始
偉大工程的感謝! – user1035217 2012-02-15 14:56:33
安東尼,是有可能得到的結果到另一個'DataTable'而不是使用'ToArray的()''var'?或者,我應該只將'var'轉換成'DataTable'?希望有'ToDataTable()';) – bonCodigo 2014-07-11 03:26:00
int count = tblData.AsEnumerable()
.Count(row => row.Field<DateTime>("DateTime").Equals(startTime));
或查詢:
int count = (from row in tblData.AsEnumerable()
where row.Field<DateTime>("DateTime").Equals(startTime)
select row).Count();
+1你確定你需要'AsEnumerable()'那裏?我認爲'Count'與SQL很好地搭配,所以你可以依靠LINQ2SQL完全在RDBMS層完成你的工作。 – dasblinkenlight 2012-02-15 14:39:22
@dasblinkenlight,目前尚不清楚他在使用Linq-to-SQL。當OP表示數據表時,我將其表示爲「DataTable」類型的實際內存中對象。當然,這可能是非常錯誤的。 – 2012-02-15 14:42:07
@AnthonyPegram你說得對,我認爲這是LINQ-2-SQL的時候,其實這個問題並沒有這麼說。 – dasblinkenlight 2012-02-15 14:43:44
這是不可能的。請注意,對於SQL(我假設你使用SQL),返回的行順序不能保證。您的行按照主鍵進行物理排序。所以如果你想要一個可靠的行標識符,你必須使用你的主鍵號碼/ ID。
查看http://stackoverflow.com/questions/1165028/how-do-i-add-row-number-to-a-linq-query-or-entity – 2012-02-15 14:35:40
查看http://code.msdn.microsoft .COM/LINQ到數據集-09787825和向下滾動,選擇 - 索引 – 2012-02-15 14:41:40