2012-03-08 72 views
1

我有2個數據表objdatatable1和objdatatable2。爲多個值篩選數據表

我需要過濾objdatatable2中的數據,以便objdatatable2中的market_id不應位於objdatatable1中。

我甚至開到LINQ將在條款過濾的不接觸

+0

http://stackoverflow.com/questions/4212317/how-to-write-nested-query-in-linq – Dinesh 2012-03-08 04:23:17

+0

這可以幫助你導出你的答案 – Dinesh 2012-03-08 04:23:35

+0

請不要使用前綴與您的標題「 C#「等等。這就是標籤的用途。 – 2012-03-08 05:15:27

回答

0

這從objectdatatable2拷貝到數據表dt所有行具有在「market_id」字段,不值在objectdatatable1中出現在相同名稱的字段中。在此編輯中,'market_id'字段的類型爲string,objectdatatable2intobjectdatatable1

// This creates an empty DataTable with the same structure as objdatatable2. 
DataTable dt = objdatatable2.Clone(); 

var results = objdatatable2.AsEnumerable().Where(r2 => !objdatatable1.AsEnumerable().Any(r1 => (r2.Field<string>("market_id") == r1.Field<int>("market_id").ToString()))); 
// Copy results to the DataTable only if there are results. 
if (results.Count() > 0) { 
    dt = results.CopyToDataTable(); 
} 
+0

這個過濾器。但我怎樣才能轉換回數據表。 .CopyToDataTable()告訴「指定的轉換無效」。 – 2012-03-08 04:54:01

+0

@KuntadyNithesh在這種情況下,請調用[CopyToDataTable()](http://msdn.microsoft.com/zh-cn/library/system.data.datatableextensions.copytodatatable.aspx)。我更新了我的答案。 – 2012-03-08 05:07:13

+0

.CopyToDataTable()告訴「指定的轉換無效」。 – 2012-03-08 05:19:27

2

objdatatable2.AsEnumerable().SkipWhile(dr2 => { return objdatatable1.AsEnumerable().Any(dr1 => { return (dr1.Field<String>("market_id ") == dr2.Field<String>("market_id ")); }) });