Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在执行select子句之前检查列是否存在_C#_Sql_Linq_Datatable - Fatal编程技术网

C# 在执行select子句之前检查列是否存在

C# 在执行select子句之前检查列是否存在,c#,sql,linq,datatable,C#,Sql,Linq,Datatable,我在来自sql的foreach循环中使用DataTable,如下所示: foreach(var i in tasks) { // query sql var timeOfTasks = db.GetTableBySQL($"exec usp_Get_WorkedProyectTime @TaskTypeCategoryId = '{i.TaskTypeCategoryId}', @TaskId= '{i.TaskId}'"); // read columns

我在来自sql的foreach循环中使用
DataTable
,如下所示:

 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();
 }
并非所有任务结果都具有相同的数据行。并且每行并不包含所有字段。在使用查询之前,是否有方法检查结果中是否存在列?

您可以尝试使用检查数据表中是否存在列

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();

我在想,在这种情况下是否可以使用
切换框
?在您的情况下,我会使用
If
而不是
切换框
,因为每个列检查都应该是独立的。我在使用
Contains
时遇到问题,它要求我输入主键,所以我这样做:
timeOfTasks.PrimaryKey=new DataColumn[]{timeoftask.Columns[“ProgressToBackCheck”]};
但其他列也有同样的问题,因为如果一列不存在,我无法设置主列