【问题标题】:Filtering data table for multiple values过滤多个值的数据表
【发布时间】:2012-03-08 15:01:57
【问题描述】:

我有 2 个数据表 objdatatable1 和 objdatatable2 。

我需要过滤 objdatatable2 中的数据,使得 objdatatable2 中的 market_id 不应该在 objdatatable1 中。

我什至要打开 linq,它会过滤 not in 子句中的联系人

【问题讨论】:

标签: c# linq datatable rowfilter


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    这会将objectdatatable2 中的所有行复制到DataTable dt,这些行在“market_id”字段中具有值,而这些行未出现在objectdatatable1 中的同名字段中。在本次编辑中,“market_id”字段在 objectdatatable2 中的类型为 string,在 objectdatatable1 中的类型为 int

    // 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();
    }
    

    【讨论】:

    • 这个过滤器。但我怎样才能转换回数据表。 .CopyToDataTable() 告诉“指定的演员表无效。”
    • @KuntadyNithesh 在这种情况下,请致电CopyToDataTable()。我更新了我的答案。
    • .CopyToDataTable() 告诉“指定的演员表无效。”
    • @KuntadyNithesh market_id 字段是否是两个数据表上的 int?如果不是,您将不得不更改我的代码中的Field T
    • @its int in objdatatable1 和 string 在 other .所以我将它们都转换为 string 。但现在它给出的错误是无法将十进制转换为字符串。但 objdatatable2 中没有小数列。有错吗?
    猜你喜欢
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多