首页 > 解决方案 > 如何更改此 LINQ 查询以使用我的列表而不是硬编码的数字?

问题描述

我终于让我的 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);
}

我想用我拥有的包含 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;
    }

标签: c#linqdatatable

解决方案


假设这myList是一个List<string>,你可以尝试这样的事情:

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

或者,如果myList是 a List<int>,您可能希望将 Database 列修改为也具有 type int,您可以执行以下操作:

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

推荐阅读