首页 > 解决方案 > 如何将函数调用到使用存在函数的 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")}

标签: c#

解决方案


首先,尝试使用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您将两个操作合二为一(存在检查 + 获取值)。


推荐阅读