c# - 在执行 select 子句之前检查列是否存在
问题描述
我DataTable
在 sql 的 foreach 循环中使用 a ,例如:
foreach(var i in tasks)
{
// query sql
var timeOfTasks = db.GetTableBySQL($"exec usp_Get_WorkedProyectTime @TaskTypeCategoryId = '{i.TaskTypeCategoryId}', @TaskId= '{i.TaskId}'");
// read columns (different rows have different columns)
var progressToBackCheck = (from DataRow dr in timeOfTasks.Rows select dr["ProgressToBackCheck"]).FirstOrDefault();
var backcheckToCorrection = (from DataRow dr in timeOfTasks.Rows select dr["BackcheckToCorrection"]).FirstOrDefault();
var correctionsToCompleted = (from DataRow dr in timeOfTasks.Rows select dr["CorrectionsToCompleted"]).FirstOrDefault();
var progressToCompleted = (from DataRow dr in timeOfTasks.Rows select dr["ProgressToCompleted"]).FirstOrDefault();
}
并非所有任务结果都具有相同的数据行。并且每一行都不包含所有字段。在我使用查询之前,有没有办法检查结果中是否存在列?
解决方案
您可以尝试使用DataColumnCollection.Contains来检查该列是否存在于数据表中。
if (timeOfTasks.Columns.Contains("ProgressToBackCheck"))
{
}
您可以使用此 linq 获取字段,添加where
linq
where timeOfTasks.Columns.Contains("ProgressToBackCheck")
看起来像这样。
var progressToBackCheck = (
from DataRow dr in timeOfTasks.Rows
where timeOfTasks.Columns.Contains("ProgressToBackCheck")
select dr["ProgressToBackCheck"]
).FirstOrDefault();
推荐阅读
- python - Mac M1如何使用python2.7的虚拟环境?
- node.js - 在 React Native 中设计的 IOS 应用程序停止接收信号通知
- c# - Gmap删除一些信息
- linux - Apache2 错误日志中的“proxy_fcgi:error”是什么意思?
- python - PyDev eclipse 无法导入自己的模块
- recaptcha - 加载资源失败:加载 https://www.google.com/recaptcha/enterprise/webworker.js 时的 net::ERR_BLOCKED_BY_RESPONSE
- python - 如何根据映射文件更新大查询数据?
- python - 多输入列表规范化
- javascript - 如何将具有动态属性的对象的值转换为数组
- xorg - 如何在 Xorg 中自动将分辨率调整到较小的显示器?