c# - 如何将函数调用到使用存在函数的 Linq 列表查询
问题描述
我有这个方法,下面有一个 linq 语句。我不喜欢多个 if 语句,我正在尝试找到没有这些 if 语句并拥有私有方法的最佳方法。
我的字段值是这样设置的:
var fieldValues = await GetFields // then it's being passed to my method.
public static AppraisalContactBorrower BuildCoBorrower(List<LoanFieldValue> fieldValues) {
var coborrower = new AppraisalContactBorrower();
if (fieldValues.Exists(f => f.FieldId == "CX.OS.AO.COBORRNAME")) {
coborrower.Name = fieldValues.First(v => v.FieldId == "CX.OS.AO.COBORRNAME").Value;
}
if (fieldValues.Exists(f => f.FieldId == "CX.OS.AO.BORRCONTACTZIP")) {
borrower.Zip = fieldValues.First(v => v.FieldId == "CX.OS.AO.BORRCONTACTZIP").Value;
}
if (fieldValues.Exists(f => f.FieldId == "CX.OS.AO.BORRCONTACTZIP")) {
borrower.Zip = fieldValues.First(v => v.FieldId == "CX.OS.AO.BORRCONTACTZIP").Value;
}
我想要做的是而不是这个:
coborrower.Name = fieldValues.First(v => v.FieldId == "CX.OS.AO.COBORRNAME").Value;
有类似的东西。
if (fieldValues.Exists(f => f.FieldId == "CX.OS.AO.BORRCONTACTZIP")) {
coborrower.Name = SETVALUE("CX.OS.AO.BORRCONTACTZIP")}
解决方案
首先,尝试使用Enumerable.ToDictionary将字段值按 分组FieldId
,然后使用IDictionary.TryGetValue获取现有值:
public static AppraisalContactBorrower BuildCoBorrower(List<LoanFieldValue> fieldValues) {
var groupedFieldValues = fieldValues.ToDictionary(f => f.FieldId)
var coborrower = new AppraisalContactBorrower();
if (groupedFieldValues.TryGetValue("CX.OS.AO.COBORRNAME", out var name)) {
coborrower.Name = name.Value;
}
if (groupedFieldValues.TryGetValue("CX.OS.AO.BORRCONTACTZIP", out var zip)) {
borrower.Zip = zip.Value;
}
}
使用 Dictionary 可以更快地检查适当的字段是否存在,因为它是 O(1),并且TryGetValue
您将两个操作合二为一(存在检查 + 获取值)。
推荐阅读
- python - Regrid 地球静止 GOES 卫星数据到笛卡尔网格
- api - GCP API Gateway / yaml / 安全定义无法正常工作
- c++ - 扩展泛型类时如何访问父级父级的属性
- excel - VBA - 在一个列表中搜索值,在另一个列表中搜索并粘贴到相邻单元格
- python-3.x - 将“Wed May 27 07:13:23 EDT 2020”格式的 pandas 数据框列转换为日期时间
- java - 使用 iText 将 HTML 转换为 PDF 时出现空指针异常
- .net - 模态打开但包含 _layout.cs
- python - 如何快速检查 PySpark Dataframe 中是否存在行?
- leaflet - geoman - 如何在绘图模式下创建特征后在编辑模式下监听特征变化
- javascript - 用另一个数组对象过滤一个数组对象