2012-02-15 84 views
1

我怎樣才能得到它符合一定條件的數據表中的行號的數組?例如,我有一個「DateTime」列的數據表。我想檢索「DateTime」等於變量startTime的數據表的行號。使用LINQ得到的數據表的行數符合某些條件的

我知道如何獲取實際的行,但在數據表中的行的數量不限。

任何幫助將不勝感激:)

+1

查看http://stackoverflow.com/questions/1165028/how-do-i-add-row-number-to-a-linq-query-or-entity – 2012-02-15 14:35:40

+0

查看http://code.msdn.microsoft .COM/LINQ到數據集-09787825和向下滾動,選擇 - 索引 – 2012-02-15 14:41:40

回答

6

如果我讀的問題的權利,使用的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))開始

+0

偉大工程的感謝! – user1035217 2012-02-15 14:56:33

+0

安東尼,是有可能得到的結果到另一個'DataTable'而不是使用'ToArray的()''var'?或者,我應該只將'var'轉換成'DataTable'?希望有'ToDataTable()';) – bonCodigo 2014-07-11 03:26:00

7
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(); 
+0

+1你確定你需要'AsEnumerable()'那裏?我認爲'Count'與SQL很好地搭配,所以你可以依靠LINQ2SQL完全在RDBMS層完成你的工作。 – dasblinkenlight 2012-02-15 14:39:22

+0

@dasblinkenlight,目前尚不清楚他在使用Linq-to-SQL。當OP表示數據表時,我將其表示爲「DataTable」類型的實際內存中對象。當然,這可能是非常錯誤的。 – 2012-02-15 14:42:07

+0

@AnthonyPegram你說得對,我認爲這是LINQ-2-SQL的時候,其實這個問題並沒有這麼說。 – dasblinkenlight 2012-02-15 14:43:44

-1

這是不可能的。請注意,對於SQL(我假設你使用SQL),返回的行順序不能保證。您的行按照主鍵進行物理排序。所以如果你想要一個可靠的行標識符,你必須使用你的主鍵號碼/ ID。

相關問題