c# - 搜索多个列表并更新另一个列表中的字段
问题描述
我有 3 个项目列表,这些项目将用于更新另一个列表中的对象。
public class Item1
{
public string A
public string B
public string C
public string D
public string E
}
public class Item2
{
public string A
public string B
public string D
public string E
}
public class Item3
{
public string A
public string C
public string D
public string E
}
public class ObjectToUpdate
{
public string A
public string B
public string C
public string D
public string E
}
使用此标准更新对象列表的最快方法是什么?
如果对象中的 A、B、C 与 Item1 中的 A、B、C 匹配,则设置 D 和 E 等于项目 1 中的 D 和 E。
否则,如果对象中的 A、B 与 Item2 中的 A、B 匹配,则设置 D 和 E 等于项目 2 中的 D 和 E。
否则,如果对象中的 A、C 与 Item3 中的 A、C 匹配,则设置 D 和 E 等于项目 3 中的 D 和 E。
所有这些都在列表中。
List<Item1> list1
List<Item2> list2
List<Item3> list3
List<ObjectToUpdate> objectsToUpdate
添加尝试:
foreach (var item in objectsToUpdate)
{
var a = list1.FirstOrDefault(l => l.A == item.A && l.B== item.B && l.C== item.C);
if(a != null)
{
item.D= a.D;
item.E= a.E;
}
else
{
var b = list2.FirstOrDefault(l => l.A == item.A && l.B == item.B);
if(b != null)
{
item.D= b.D;
item.E= b.E;
}
else
{
var c = list3.FirstOrDefault(l => l.A == item.A && l.C == item.C);
if (c != null)
{
item.D= c.D;
item.E= c.E;
}
}
}
}
解决方案
foreach (var item in objectsToUpdate)
{
var a = list1.Where(l => l.A == item.A && l.B == item.B && l.C == item.C).ToList();
if(a != null)
{
foreach(var x in a)
{
item.D = x.D;
item.E = x.E;
}
}
var b = list2.Where(l => l.A == item.A && l.B == item.B).ToList();
if(b != null)
{
foreach(var x in b)
{
item.D = x.D;
item.E = x.E;
}
}
var c = list3.Where(l => l.A == item.A && l.C == item.C).ToList();
if (c != null)
{
foreach(var x in c)
{
item.D = x.D;
item.E = x.E;
}
}
}
推荐阅读
- bluetooth-lowenergy - createCharacteristic 具有 3 个或更多特性的 BLE 应用程序?
- testing - 在 JSON 测试用例中读取额外的属性或主机地址
- r - 在 ubuntu 16.04 中从终端运行 R 会给出致命错误消息
- notepad++ - Notepad++ 加入模式匹配后的行
- html - 使用 CSS @supports 查询 CSS env() 和 CSS 变量支持
- java - 为非泛型堆栈类编写方法如何工作?
- java - 检查在移动屏幕上滑动是否加载了新元素
- vb.net - 如何在 DataGridView 中获取实际行的高度?
- sql - 在将新行插入现有表时自动创建新 GUID 不工作
- mocha.js - 使用 ESM 时如何让伊斯坦布尔识别代码覆盖率?