这是我的代码:
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'
答案 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)
如果您希望将检索到的记录用于其他操作,那么它会更好,否则最好在查询中使用过滤器,并且有以下方法: