2015-04-02 88 views
0

我有2個大的數據表,需要通過組合鍵的平等相交人 - 說從一個表,然後從其他("MyId1", "MyId2")領域("Id1", "Id2")快速連接兩個大的DataTable

我需要這儘可能快地工作,所以經常LINQ的數據行JOIN是解決不了問題。我想爲<composite_key>/<datarow>等表格創建字典,然後將它們的鍵相交,這將顯着加快工作。對於複合鍵,我需要使用類似Tuple這樣的組合值並進行比較。這個工程非常快,但問題是當我嘗試比較喜歡Tuple<int, int>(1,1)Tuple<short, short>(1,1)鍵 - 因爲類型參數不同,按鍵永遠不會相等。我現在看到的唯一選擇是將關鍵字段預轉換爲其最覆蓋的類型(如字節,整數,長整數等),然後進行比較。不是一個很好的解決方案。 問題:
1.是否有類似的元組可以比較「相似」類型的值的東西嗎?
2.是否有加入兩個數據表等快速路?
謝謝!
PS:這些鍵字段並非總是數據表的主鍵

+1

創建一個數據庫視圖會比代碼做 – Shekhar 2015-04-02 00:07:46

+0

@Shekhar在我的應用我可以從variuos源有數據,不僅從SQL服務器 – LINQ2Vodka 2015-04-02 00:08:43

回答

0

您可以在Linq中使用相同的類型進行相等性檢查。使用加寬轉換(short to int)來防止數據丟失。

var tableA = new List<Tuple<int, int>>() { new Tuple<int, int>(1, 1) }; 
var tableB = new List<Tuple<short, short>>() { new Tuple<short, short>(1, 1), new Tuple<short, short>(1, 2) }; 


var queryResult = from a in tableA 
        join b in tableB 
        on a equals new Tuple<int, int>((int)b.Item1, (int)b.Item2) 
        select new { a, b }; 
+0

由於更有效的,但我想解決問題以更常見的方式,就像我不僅有這些類型 – LINQ2Vodka 2015-04-02 02:10:49