我有一個從數據庫填充如下一個DataTable
:LINQ語句只在一個DataTable產生的一個結果,其中多存在
SPName SName Row text
p_obj_prod1 dbo 1 A
p_obj_prod1 dbo 1 B
p_obj_prod1 dbo 1 C
p_obj_prod2 dbo 1 D
p_obj_prod2 dbo 1 E
p_rpt_prod3 dbo 1 F
p_rpt_prod3 dbo 1 G
p_rpt_prod3 dbo 1 H
而且我有以下的代碼,將處理這些數據:
foreach (var row in procedureData.Tables[0].AsEnumerable()
.Select(dr => new { Schema = dr["SName"], Procedure = dr["SPName"] })
.Distinct())
{
//DO STUFF
foreach (string procedureText in procedureData.Tables[0].AsEnumerable()
.Where(dr => dr["SPName"] == row.Procedure).Select(dr => dr["text"]))
{
//DO MORE STUFF
}
//DO EVEN MORE STUFF
}
在這種情況下,我會希望外部foreach循環重複3次,它會。我也希望內部的foreach循環迭代3次,第一次外循環迭代,第二次迭代2次,第三次迭代3次。然而,內循環只有一個值(序列中的第一個值)。
我對LINQ並不陌生,並且創建了比這更復雜的查詢,但是這真的讓我難以理解內層循環沒有獲得所有預期結果的原因。我想我在第二個循環的LINQ查詢中犯了一個錯誤,但對我來說似乎很好。
任何人都可以闡明什麼可能是問題?
非常感謝。
UPDATE
剛剛意識到我正在錯誤,爲什麼內環只有一個值。這是因爲它正在做參考比較,而不是DataTable的'SPName'列上的值比較。
將內循環的代碼更改爲以下固定的問題,但我會保留GroupBy
版本,因爲我更喜歡它!
foreach (string procedureText in procedureData.Tables[0].AsEnumerable()
.Where(dr => dr["SPName"].ToString() == row.Procedure.ToString())
.Select(dr => dr["text"]))
{
如果在外部'foreach'中使用'GroupBy'而不是'Select' /'Distinct',會發生什麼? – Rawling 2012-08-13 11:16:56