c#datatable如何获取具有条件的所有记录

时间:2014-08-19 09:37:28

标签: c# datatable

这是我的代码:

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'    

4 个答案:

答案 0 :(得分:3)

如果您想将IEnumerable<DataRow>转换为DataTable,可以使用CopyToDataTable

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

但是,当您已经检索到我将在数据库中执行的所有记录时,不是过滤。 Here是从List<string>构建参数的一个很好的技巧。

答案 1 :(得分:1)

使用CopyToDataTable扩展程序将IEnumerable<DataRow>转换为DataTable

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

答案 2 :(得分:0)

获取var数据类型中的值,因为LINQ返回System.Data.EnumerableRowCollection<System.Data.DataRow,无法将隐含转换为Datatable类型

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

答案 3 :(得分:0)

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

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