我有一个由存储过程填充的DataTable,以及包含该集合的数据表Requests(RequestNumber and Tasks(TaskId).当我通过任务到达第一个请求编号时,我将其添加到我的列表中,然后使用其他数据行,我检查列表以查看它们是否存在(if(dr["RequestNumber"].ToString() != acList[i].RequestNumber))如果有,我删除dataRow,如果不是,我将它们添加到列表.
这在顺序中很好用,但是如果数据行和列表偏离一个,则允许添加行.如果值存在于列表中,还有其他方法可以完成查找.
提前致谢.
foreach (DataRow dRow in dt.Rows)
{
DataRow dr = dt.NewRow();
dr["Project"] = dRow["Project"];
dr["RequestNumber"] = dRow["RequestNumber"];
dr["RequestId"] = dRow["RequestId"];
dr["TaskType"] = dRow["TaskType"];
dr["TaskId"] = dRow["TaskId"];
dr["TaskStatus"] = dRow["TaskStatus"];
dr["AssignedTo"] = dRow["AssignedTo"];
dr["DateDue"] = dRow["DateDue"];
if (acList.Count == 0)
{
acList.Add(new AssignedClass
{
Project = dr["Project"].ToString(),
RequestNumber = dr["RequestNumber"].ToString(),
RequestId = dr["RequestId"].ToString(),
TaskType = dr["TaskType"].ToString(),
TaskId = dr["TaskId"].ToString(),
TaskStatus = dr["TaskStatus"].ToString(),
AssignedTo = dr["AssignedTo"].ToString(),
DateDue = dr["DateDue"].ToString()
});
}
else
{
for (int i = 0; i < acList.Count; i++)
{
if(dr["RequestNumber"].ToString() != acList[i].RequestNumber)
{
acList.Add(new AssignedClass
{
Project = dr["Project"].ToString(),
RequestNumber = dr["RequestNumber"].ToString(),
RequestId = dr["RequestId"].ToString(),
TaskType = dr["TaskType"].ToString(),
TaskId = dr["TaskId"].ToString(),
TaskStatus = dr["TaskStatus"].ToString(),
AssignedTo = dr["AssignedTo"].ToString(),
DateDue = dr["DateDue"].ToString()
});
}
else
{
dr.Delete();
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用LINQ,就像检查是否有匹配一样简单:
if ( !acList.Any(a => a.RequestNumber == dr["RequestNumber"].ToString() )
acList.Add( ... );
Run Code Online (Sandbox Code Playgroud)
此外,似乎在一开始分配代码dRow到dr没有目的.只需dRow在代码的其余部分直接使用即可.而且我认为您不想将其(acList.Count == 0)视为一种特殊情况,因为这只会导致您必须复制逻辑,从而维护相同代码的两个单独副本.因此,如果我正确地理解了一切,这个简化的代码应该完成同样的事情:
foreach (DataRow dRow in dt.Rows)
{
if ( !acList.Any(a => a.RequestNumber == dRow["RequestNumber"].ToString() )
{
acList.Add(new AssignedClass
{
Project = dRow["Project"].ToString(),
RequestNumber = dRow["RequestNumber"].ToString(),
RequestId = dRow["RequestId"].ToString(),
TaskType = dRow["TaskType"].ToString(),
TaskId = dRow["TaskId"].ToString(),
TaskStatus = dRow["TaskStatus"].ToString(),
AssignedTo = dRow["AssignedTo"].ToString(),
DateDue = dRow["DateDue"].ToString()
});
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13059 次 |
| 最近记录: |