首页 > 解决方案 > 在执行 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();
 }

并非所有任务结果都具有相同的数据行。并且每一行都不包含所有字段。在我使用查询之前,有没有办法检查结果中是否存在列?

标签: c#sqllinqdatatable

解决方案


您可以尝试使用DataColumnCollection.Contains来检查该列是否存在于数据表中。

if (timeOfTasks.Columns.Contains("ProgressToBackCheck"))
{

}

您可以使用此 linq 获取字段,添加wherelinq

where timeOfTasks.Columns.Contains("ProgressToBackCheck")

看起来像这样。

var progressToBackCheck = (
            from DataRow dr in timeOfTasks.Rows
            where timeOfTasks.Columns.Contains("ProgressToBackCheck")
            select dr["ProgressToBackCheck"]
            ).FirstOrDefault();

推荐阅读