加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

检查List C#中是否存在值

发布时间:2020-12-16 01:53:18 所属栏目:百科 来源:网络整理
导读:我有一个由存储过程填充的DataTable,以及包含请求集合(RequestNumber和Tasks(TaskId))的数据表.当我通过任务到达第一个请求号时,我将它添加到我的列表中,然后使用额外的数据行,我检查列表以查看它们是否存在(if(dr [“RequestNumber”].ToString()!= acList
我有一个由存储过程填充的DataTable,以及包含请求集合(RequestNumber和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(),DateDue = dr["DateDue"].ToString()
            });
        }
        else
        {
            dr.Delete();
        }
      }
    }

解决方法

使用LINQ,就像检查是否有匹配一样简单:

if ( !acList.Any(a => a.RequestNumber == dr["RequestNumber"].ToString() )
    acList.Add( ... );

此外,似乎开头将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()
        });
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读