【发布时间】:2021-03-05 06:15:05
【问题描述】:
我有下面列出的三个类:
class OuterObjects
{
string name;
List<InnerObjects> myList;
}
class InnerObjects
{
float small;
float big;
}
class CorrectValues
{
string name;
float correctValue;
}
所以我的代码遍历所有内容并到达一个点,我映射了所有 OuterObjects 和 InnerObjects,然后我通过数据库调用分别加载 CorrectValues。
所以我有:
List<OuterObjects> theList = [loaded up with many names and InnerObjects]
所以我需要写一些东西,通过 OuterObjects 进入 InnerObjects 并找到所有小的 > 大的并修复它们。 (float) big 将替换为 CorrectValues 和 OuterObjects 中的名称匹配的正确值。名称也可以在它的每个对象中出现多次,但正确的值将始终匹配相同的名称(即,如果在 CorrectValues 中有 2 个“鲍勃”的名称,那么正确的值将是相同的)。
我有类似的东西:
outerObjects.Select(q => q.InnerObjects).Where(q => (q.small > q.big) ... then update the big with the correctValue
有没有一种好的、优雅的方式来做到这一点?我也不想使用 forEach 语句。
【问题讨论】:
-
Linq 是一个查询(q 是查询),它读取数据并且不用于更新值
-
我看到这样的事情:customers.Where(c => c.IsValid).Select(c => { c.CreditLimit = 1000; return c; }).ToList();我在网上找到的
-
在哪里更新现有项目?代码正在创建一个新列表。你有一个 where 所以新列表只包含一些原始数据。而且您的代码只返回一个属性。
-
那么最好的方法是什么?我假设使用单独的 linq 来获得所需的正确部分,然后使用某些东西来查找和更新值。
-
“我不想使用 forEach” - 为什么不呢?
标签: c# .net entity-framework linq .net-core