Visual C#,来自现有DataTable的SQL查询?

时间:2018-03-01 04:18:09

标签: c# sql select datatable

假如我用这样的SQL命令填充DataTable

SQLCmd.Parameters.AddWithValue("@Date",DateTime.Today());
SQLCmd.CommandText = @"select ID, Name, Date from TestTable1 where Date=@Date";

SqlDataAdapter SQLAdapter = new SqlDataAdapter(SQLCmd);
DataTable dt = new DataTable();
SQLAdapter.Fill(dt);

是否可以进一步查询另一个表格中的内容,该表格也在dt中?

例如,执行类似

的操作
select ID 
from TestTable2 
where TestTable2.ID = dt["ID"];

类似的东西......假设TestTable1TestTable2都有一列ID

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

作为考虑的另一种选择,您可以JOIN TestTable2喜欢:

SELECT t1.[ID]
    ,t1.[Name]
    ,t1.[DATE]
    ,t2.[ID]
FROM TestTable1 t1
INNER JOIN TestTable2 t2 ON t1.ID = t2.ID
WHERE t1.[DATE] = @Date

答案 1 :(得分:1)

您可以使用linkserver一次获取数据,否则代码可能会帮助您解决问题。使用","获取所有ID分开并传递给第二个查询。

string ids = String.Join(",", dt.AsEnumerable().Select(x => x.Field<int>("ID").ToString()).ToArray());
SQLCmd.Parameters.AddWithValue("@ID",ids);
SQLCmd.CommandText = @"select ID from TestTable2 where ID in ("+@ID+")";
SqlDataAdapter SQLAdapter = new SqlDataAdapter(SQLCmd);
DataTable dt2 = new DataTable();
SQLAdapter.Fill(dt2);

答案 2 :(得分:0)

您可以使用 DataView

进行过滤
DataView dv = new DataView(dt);
dv.RowFilter = "query"; // query example = "DATE = 'Your Date'"