【问题标题】:c# datatable how to get all the records with a conditionc#datatable如何获取所有有条件的记录
【发布时间】:2014-08-19 09:37:28
【问题描述】:

这是我的代码:

SqlCommand vmpCmd = new SqlCommand("sp", connectionstring);
SqlDataAdapter DAvmp = new SqlDataAdapter(vmpCmd);
DataSet DSvmp = new DataSet();
DSvmp.Clear();
DAvmp.Fill(DSvmp);
DataTable table;
table = DSvmp.Tables[0];

table 我需要获取其 Campaign 列存在于此列表中的所有 List<string> compaines = new List<string>();

我尝试了什么

我试过了:

table = (from row in table.AsEnumerable()
         where compaines.Contains(row.Field<string>("Campaign"))
         select row);

但我在select 上遇到了这个异常:

Cannot implicitly convert type 'System.Data.EnumerableRowCollection<System.Data.DataRow>' to 'System.Data.DataTable'    

【问题讨论】:

    标签: c# datatable


    【解决方案1】:

    如果您想将IEnumerable&lt;DataRow&gt; 转换为DataTable,您可以使用CopyToDataTable

    var filteredRows = table.AsEnumerable()
        .Where(row => compaines.Contains(row.Field<string>("Campaign")));
    table = filteredRows.CopyToDataTable();
    

    但不是在您已经检索到所有记录时进行过滤,而是在数据库中执行此操作。 Here 是从 List&lt;string&gt; 构建参数的好技巧。

    【讨论】:

    • 我正在尝试您的解决方案
    • 你改变了你的代码,我之前的代码错了吗?当我制作 var 然后 copytodatatble 它可以工作
    • @MarcoDinatsoli:您可以随时查看问题/答案的修订历史,了解发生了什么变化。 link 位于问题/答案下方。在这种情况下,我用点替换了冒号,并提到如果可能的话,您应该在数据库中进行过滤,因为如果表变大,这样做会更有效率。
    【解决方案2】:

    使用CopyToDataTable扩展方法将IEnumerable&lt;DataRow&gt;转换为DataTable

    table = (from row in table.AsEnumerable()
             where compaines.Contains(row.Field<string>("Campaign"))
             select row).CopyToDataTable();
    

    【讨论】:

      【解决方案3】:

      像这样获取 var 数据类型中的值,因为 LINQ 返回 System.Data.EnumerableRowCollection&lt;System.Data.DataRow 不能隐式转换为 Datatable 类型

      var filteredTable = (from row in table.AsEnumerable()
                           where compaines.Contains(row.Field<string>("Campaign"))
                           select row);
      

      【讨论】:

      • 我不能这样做,因为我在过滤表时这样做了`table.Compute("Sum(TotalCalls)", "");`
      【解决方案4】:

      如果您希望检索到的记录用于其他操作,那么很好,否则最好在查询中使用过滤器,为此有以下方法:

      1. 您可以使用参数化查询
      2. 您可以使用 List 中的 String.Join() 构建查询字符串

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-10-04
        • 1970-01-01
        • 2018-10-27
        • 1970-01-01
        • 2020-09-03
        • 1970-01-01
        • 2020-03-20
        相关资源
        最近更新 更多