Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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# 如何使用LINQ替换基于键的特定字典值_C#_.net_Asp.net Core - Fatal编程技术网

C# 如何使用LINQ替换基于键的特定字典值

C# 如何使用LINQ替换基于键的特定字典值,c#,.net,asp.net-core,C#,.net,Asp.net Core,我尝试了下面的代码,但不知何故它不起作用 employeesList.ForEach(x => x.ToDictionary(y => y.Key, W => W.Key == "DeptID" ? (W.Value == "1" ? "ECE" : "EEE") : W.Value)); 我在Dictionary中有一个名为DeptID的键。它的值类似于1或2。 因此,我的要求是,如果DeptID值为1,则我需要将1替换为ECE,否则替换为EEE 我试过上面的代码,但不起

我尝试了下面的代码,但不知何故它不起作用

 employeesList.ForEach(x => x.ToDictionary(y => y.Key, W => W.Key == "DeptID" ? (W.Value == "1" ? "ECE" : "EEE") : W.Value));
我在
Dictionary
中有一个名为
DeptID
的键。它的值类似于
1
2
。 因此,我的要求是,如果
DeptID
值为
1
,则我需要将
1
替换为
ECE
,否则替换为
EEE

我试过上面的代码,但不起作用

 employeesList.ForEach(x => x.ToDictionary(y => y.Key, W => W.Key == "DeptID" ? (W.Value == "1" ? "ECE" : "EEE") : W.Value));
我犯了什么错误吗

更新1:

我有一个
列表()。我想修改
DeptID
键的值

我的要求可以通过以下代码实现

        foreach (var a in employeesList)
        {
           if (a.ContainsKey("DeptID")) { 
              if (a.ContainsValue("1")) { a["DeptID"] = "ECE"; }
              else if (a.ContainsValue("2")) { a["DeptID"] = "ECE"; } 
                }
            }

我希望用更少的代码行获得相同的结果。

您试图用LINQ执行的操作最好留给命令式代码,正如其他人在评论中提到的那样,LINQ查询数据,但不用于修改数据

此外,原始LINQ语句创建临时字典并丢弃它们

然而,如果您仍然想使用基于LINQ的解决方案,这里有一种方法可以做到

employeesList.Where(employee => employee.ContainsKey("DeptID") && (employee.ContainsValue("1") || employee.ContainsValue("2"))
    .Select(employee => 
    {
        employee["DeptID"] = employee.ContainsValue("1") ? "ECE" : "EEE";
        return employee; 
    });

我在做一些假设,但我认为这就是你想要做的:

employeesList.ForEach(x => x["DeptID"] = x["DeptID"] == "1" ? "ECE" : "EEE");


然而,我个人认为使用LINQ对数据进行变异不是一种好的方式,应该考虑其他方法。根据您的设计,您可能希望考虑为您的雇员使用对象而不是键/值对字典。

不工作的代码。使用To字典而不是工作的代码。LIQ是用于查询,而不是修改任何东西。code>ForEach
不是LINQ方法,并且不返回任何内容。此代码创建临时字典,然后丢弃它们。你想干什么?你想修改什么词典?什么是
employeesList
员工
对象的列表?还是分组员工?您想要生成什么?
employeesList.Select(x=>x.ToDictionary(y=>y.Key,W=>W.Key==“DeptID”?(W.Value==“1”?“ECE”:“EEE”):W.Value))
将生成一个
IEnumerable
,这就是您想要的吗?不。那不是OP正在做的。