如何更改此LINQ查询以使用List <int>而不是硬编码数字?

时间:2019-06-24 19:30:05

标签: c# linq datatable

我终于有了LINQ来查询数据表,并使用硬编码值,得到了包含这些记录的新数据表。但是我需要帮助来更新此代码,以将List returnClass()用作where子句中的变量。

var query = from r in d.AsEnumerable()
            where r.Field<string>("Column7") == "672"
            select r;

DataTable output = query.CopyToDataTable<DataRow>();
foreach (DataRow row in output.Rows)
{
    output.ImportRow(row);
}

Id想用我拥有的包含94个值的列表替换==“ 672”,我想从数据表中排除该值。 这是我发给我的原始帖子,但现在我只需要LINQ查询帮助就可以使用我的列表,并以一种排除任何包含列表中值的记录的方式编写。我试图使用该列表将我的34k记录过滤到29k。

我尝试过的另一个例子不起作用

            var query = from r in d.AsEnumerable()
                    where !r.Field<string>("Column7").Contains(Convert.ToString(returnClass()))
                    select r;

        DataTable output = query.CopyToDataTable<DataRow>();
        foreach (DataRow row in output.Rows)
        {
            output.ImportRow(row);
        }

列表看起来像这样(为清楚起见被截断了)

    private List<int> returnClass()
    {
        List<int> cl = new List<int>();
        cl.Add(75);
        cl.Add(76);
        cl.Add(77);
        cl.Add(78);
        cl.Add(79);
        cl.Add(80);
        cl.Add(81);
        cl.Add(82);
        return cl;
    }

1 个答案:

答案 0 :(得分:2)

假设myListList<string>,您可以尝试执行以下操作:

var query = from r in d.AsEnumerable()
            where myList.Any(r.Field<string>("Column7").Contains)
            select r;

或者,如果myListList<int>,则可能需要修改数据库列,使其也具有类型int,您可以执行以下操作:

var query = from r in d.AsEnumerable()
            where myList.Contains(r.Field<int>("Column7"))
            select r;