2012-03-08 58 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 ")); }) });