【问题标题】:How can i change this LINQ query to use my List<int> instead of the hard coded number?如何更改此 LINQ 查询以使用我的 List<int> 而不是硬编码数字?
【发布时间】:2019-06-24 19:30:05
【问题描述】:

我终于得到了我的 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);
}

我想将 == "672" 替换为我拥有的包含 94 个值的列表,我想从数据表中排除这些值。 这是我的原始帖子,它让我到达了现在的位置,但现在我只需要 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;
    }

【问题讨论】:

  • 您能否举例说明您的列表可能包含哪些内容,以及生成的查询会是什么样子?
  • myList 字符串列表还是整数?

标签: c# linq datatable


【解决方案1】:

假设myListList&lt;string&gt;,你可以试试这样:

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

或者,如果myListList&lt;int&gt;,您可能希望将数据库列也修改为int 类型,您可以执行以下操作:

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

【讨论】:

  • 它抱怨强制转换,我的数据表似乎包含值是字符串,我的列表是 Int 类型,所以我需要转换这一行吗? r.Field("Column7")
  • 我收到此错误消息“指定的演员表无效。”此行上的字符串 !returnClass().Contains(r.Field("Column7"))
  • 我继续,只是将我的列表更改为字符串值并将我的查询更新为此,它似乎工作.. var query = from r in d.AsEnumerable() where !returnClass().Any (r.Field("Column7").Contains) 选择 r;数据表输出 = query.CopyToDataTable(); foreach(输出中的 DataRow 行。行){ output.ImportRow(行); }
  • 上述工作直到它到达我的 DataTable 输出之后的行,我在新数据表上开始一个 foreach 循环我得到这个错误 Collection was modified;枚举操作可能不会执行。
  • 它在这一行抛出错误:foreach (DataRow row in output.Rows)
猜你喜欢
  • 2014-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多