2017-10-16 34 views
0

我有TableA和TableB,其中TableA具有表B中引用的複合主鍵。複合列在字符串數組中可用。我怎樣才能使用字符串數組中的列與表A的列匹配,從而動態地將TableA和TableB加載到數據集中。c#linq返回使用複合外鍵列的子錶行

例如,

string[] arTableA = new string[]{Composite key columns of A}; 
string[] arTableB = new string[]{Composite key columns of B}; 

var Result = (from A in TableA) 
       join B in TableB on new {arTableA } equals new {arTableB} 
       select TableB.Columns 
+0

你說'DataSet' ,它真的是Linq-To-Objects的DataSet(在內存集合中)還是它是數據庫提供者? –

+0

[如何在單個連接中的多個字段上的LINQ中加入]可能的副本(https://stackoverflow.com/questions/373541/how-to-do-joins-in-linq-on-multiple-fields-in -single-join) – qxg

+0

感謝您的快速回復。表格在數據集中,我正在迭代它。這些表格有數據,如訂單和訂單細節。根據某些規則,我必須刪除一些順序和級聯效應orderdetails行。問題是我需要首先從兩個表中找到唯一的列,然後基於這些列我必須從第二個表中刪除列。唯一列被收集在字符串數組中。 – Prashant

回答

0

製作,將串連鍵值這樣的功能:參加這樣當

var key = new Func<DataRow, string[], string>((r, keys) => { 
    return keys.Select(c => r[c].ToString()).Aggregate((current, next) => current + next); 
}); 

你會比使用該功能在查詢:

var result = from A in GetTableA().AsEnumerable() 
      join B in GetTableB().AsEnumerable() on key(A, arTableA) equals key(B, arTableB) 
      select B; 
+0

感謝羅布。精彩的解決方案... – Prashant