针对 DataTable 运行 SQL 查询
Posted
技术标签:
【中文标题】针对 DataTable 运行 SQL 查询【英文标题】:Run SQL Query Against DataTable 【发布时间】:2019-07-30 12:42:38 【问题描述】:我正在填充这样的数据表
static DataTable GetTable()
DataTable table = new DataTable();
table.Columns.Add("name", typeof(string));
table.Columns.Add("exam1date", typeof(date));
table.Columns.Add("exam1complete", typeof(date));
table.Columns.Add("exam2date", typeof(date));
table.Columns.Add("exam2complete", typeof(date));
table.Columns.Add("exam3date", typeof(date));
table.Columns.Add("exam3complete", typeof(date));
table.Rows.Add("joe", "2018-01-30", NULL, NULL, NULL, NULL, NULL);
table.Rows.Add('james', '2018-02-14', '2018-02-21', '2018-03-02', NULL, NULL, NULL);
table.Rows.Add('javier', '2018-01-01', '2018-01-14', '2018-03-01', '2018-03-12', '2018-04-01', NULL);
return table;
static void Main()
DataTable dtInfo = GetTable();
如何对 DataTable 运行此 SQL 语句以从数据表中以我可以使用的格式获取数据?
SELECT fname,
CASE
WHEN exam1complete IS NULL THEN 'exam1date'
WHEN exam2complete IS NULL THEN 'exam2date '
ELSE 'exam3date' END AS columnname,
CASE
WHEN exam1complete IS NULL then exam1date
WHEN exam2complete IS NULL then exam2date
ELSE exam3date END AS examdate
FROM dtInfo;
【问题讨论】:
使用 table.AsEnumerable() 枚举表。 可能值得检查LINQ
而不是 SQL
。尽管LINQ
在 C# 中,但它们实际上是相同的。它将允许您像SQL query
一样查询您的数据表。 Linq Query On A DataTable
您不能对数据表运行纯 SQL。您必须遍历执行逻辑的行,或者像 Symon 建议的那样使用 LINQ。
【参考方案1】:
它看起来有点奇怪,但如果你将 null 更改为 DateTime.MinValue 下面的代码似乎可以工作......
class Program
static void Main(string[] args)
DataTable dtInfo = GetTable();
var query =
from row in dtInfo.AsEnumerable() select new
name = row.Field<string>("name"),
columnname =
(row.Field<DateTime>("exam1complete")==DateTime.MinValue)
?
("exam1date")
:
(
(row.Field<DateTime>("exam2complete") == DateTime.MinValue) ? ("exam2date") : ("exam3date")
),
examdate =
(row.Field<DateTime>("exam1complete") == DateTime.MinValue)
?
(row.Field<DateTime>("exam1date"))
:
(
(row.Field<DateTime>("exam2complete") == DateTime.MinValue) ? (row.Field<DateTime>("exam2date")) : (row.Field<DateTime>("exam3date"))
)
;
static DataTable GetTable()
DataTable table = new DataTable();
table.Columns.Add("name", typeof(string));
table.Columns.Add("exam1date", typeof(DateTime));
table.Columns.Add("exam1complete", typeof(DateTime));
table.Columns.Add("exam2date", typeof(DateTime));
table.Columns.Add("exam2complete", typeof(DateTime));
table.Columns.Add("exam3date", typeof(DateTime));
table.Columns.Add("exam3complete", typeof(DateTime));
table.Rows.Add("joe", "2018-01-30", DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue);
table.Rows.Add("james", "2018-02-14", "2018-02-21", "2018-03-02", DateTime.MinValue, DateTime.MinValue, DateTime.MinValue);
table.Rows.Add("javier", "2018-01-01", "2018-01-14", "2018-03-01", "2018-03-12", "2018-04-01", DateTime.MinValue);
return table;
【讨论】:
以上是关于针对 DataTable 运行 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章
sql查询结果存入DataTable,然后从DataTable取数据