2015-08-26 86 views
0

我想將上述語句轉換爲LINQ。 我有多個表(在第一列中有一個標識符),我需要「相乘」它們,以便在顯示所有可能的組合時得到一個表(例如,表1 = 2行,表2 = 2行,表3 = 2行,結果表2 * 2 * 2 = 8行)。選擇*從tab1,tb2,tb3等在LINQ

如果我有一個SQLite數據庫我用來做什麼的這樣:

string sql = "SELECT * FROM tab1,tab2,tab3; 
SQLDataAdapter adapter = new SQLiteDataAdapter(sql, con); 
adapter.Fill(ds.Tables[1]); 

現在db是不再一個SQLite數據庫,但一個數據集。這個數據集包含tab1,tab2,tab3等。現在我想像以前一樣做 - 相乘表格。如何用數據集完成這項工作(如果可能的話,使用LINQ)?

回答

0

在LINQ查詢表達式中,您只需要多個from子句,

var query = from row1 in tab1 
      from row2 in tab2 
      from row3 in tab3 
      select new { row1, row2, row3 }; 

如果你不希望使用查詢表達式,你會使用SelectMany代替,但在這種情況下,查詢表達式將是簡單的。

對於數據集,你可能想是這樣的:

var query = from row1 in ds.Tables["tab1"].AsEnumerable() 
      from row2 in ds.Tables["tab2"].AsEnumerable() 
      from row3 in ds.Tables["tab3"].AsEnumerable() 
      select new { row1, row2, row3 }; 

確保你有一個using指令爲System.Data,這樣就可以在DataTableExtensions扳爲AsEnumerable

+0

非常感謝您的快速回答!這或多或少是我已經做到的。不幸的是我不能處理結果;-)。結果(查詢)應作爲新表添加到我的現有數據集中,但我不知道如何做到這一點。 – derchrome

+0

@derchrome:估計你需要用你想要的所有列創建一個表,然後用這些值創建新的行。不幸的是,你還沒有問過這個問題。我建議你像以前一樣離開這個問題(回滾你的編輯,基本上詢問你真正感興趣的作爲事後的想法),並提出一個新的問題,解釋你創建新表。請注意,從哪裏獲取新表的數據是非常不相關的 - 它可能只是一個列表... –

+0

感謝Jon。在此期間,我自己嘗試了一下,並找到了解決方案。也許它不是最好的,但它的工作原理:-)我把結果放到列表中,並在這個列表中添加不同的行到一個大行 – derchrome