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正在做的。