簡體   English   中英

如何將 function 調用到使用現有 function 的 Linq 列表查詢

[英]How do you call a function to an Linq List query that uses the exist function

我有這個方法和下面的 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可以將兩個操作合二為一(存在檢查 + 獲取值)。

您的最后兩個陳述幾乎相同。 相當於:

if (groupedFieldValues.TryGetValue("CX.OS.AO.COBORRNAME", out var name)) {
   coborrower.Name = name.Value;
}

是:

coborrower.Name = fieldValues.FirstOrDefault(v => v.FieldId == "CX.OS.AO.COBORRNAME") 
                  ?? coborrower.Name;

在原始代碼中,如果列表中不存在該字段,則不會更新coborrower.Name

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM