c# - 循环遍历 IEnumerable 并将它们传递给具有多个 if/else 条件的模型
问题描述
我有一个IEnumerable
这样的实体列表
return entities.Select(g => new Model(
g.Field1,
g.Field2,
g.Field3
));
但是,需求发生了变化,我需要遍历列表并检查每个实体中的某个字符串字段,然后将其传递给模型。如果字符串字段等于某个字符串,比如“a”,那么它将以一种方式传入模型,但是当字符串字段等于“b”或“c”甚至“d”时,它将以 a 的形式传入模型根据字段的字符串类型相应地采用不同的方式。
return entities.
.GroupBy(x=> x.field =="a")
.Select(g => new Model(
g.Field1,
g.Field2,
g.Field3,
else
.GroupBy(x=> x.field =="b")
.Select(g => new Model(
g.Field4,
g.Field5,
g.Field6,
else
.GroupBy(x=> x.field =="c")
.Select(g => new Model(
g.Field7,
g.Field8,
g.Field9,
);
我正在考虑先做一个 foreach 然后再做一个 groupBy then if 语句。但不确定如何为该 linq 语句构造适当的语法。如果实体的数量可以达到数百个,那么在这种情况下是否建议使用 foreach 循环?
解决方案
您可以使用 switch 表达式(自 C# 8 起新增)。为了将它与 EF 一起使用,您首先必须选择一个包含所有需要属性的匿名类型,然后将其加载到内存中(使用 eg ToList()
):
return entities.Select(g => new
{
g.field, g.Field1, g.Field2, g.Field3,
g.Field4, g.Field5, g.Field6, G.Field7,
g.Field8, g.Field9
}).ToList().Select(g => g.field switch
{
"a" => new Model(g.Field1, g.Field2, g.Field3),
"b" => new Model(g.Field4, g.Field5, g.Field6),
"c" => new Model(g.Field7, g.Field8, g.Field9)
});
推荐阅读
- python - Keras 调谐器错误:logits 和标签必须具有相同的第一维
- moodle - 在 Moodle 中随机分配学生
- automation - Microsoft 3D Viewer 可以自动化吗?
- docker - 前端似乎调用后端的错误端口
- excel - Excel 的过滤器、SQL 的 Jet 报告和隐式相交
- c++ - 当该文件存在且 LD_LIBRARY_PATH 正常时,什么会导致条件性 `ldd: library.so => not found`?
- javascript - 在 django 中进行更改后,JavaScript 不会加载和 console.log()
- javascript - 我在控制台中不断收到此错误,我访问此路线的所有内容
- spring - Spring Boot:刷新由外部系统调用更新的服务事务中的实体
- kotlin - 使用 Gradle Kotlin DSL 安装依赖项不起作用