簡體   English   中英

如何從 ForEach() 的 Lambda 表達式中獲取字段的值?

[英]How to get the value of a field from Lambda expression for ForEach()?

我有一個映射 json,如下所示。

{
  "MappingFields": [
    {
      "ID": "M1",
      "Name": "John",
      "Role": "Developer"
    },
    {
      "ID": "M2",
      "Name": "Peter",
      "Role": "Tester"
    }]
}

我需要將ID字段與我在輸入中收到的字段進行比較,並獲得NameRole的相應值。 我通過下面實現了同樣的目標。

string id = "M2"; \\input value
List<MappingField> mappedData = mappingFields.MappingFields.ToList(); \\MappingField is a data model
string name = string.Empty;
string role = string.Empty;
foreach(var item in mappedData) 
{
    if(item.ID == id)
    {
        name = item.Name;
        role = item.Role;
    }
}

我相信這可以通過 lambda 表達式以更簡單的方式完成。 以下是我嘗試過的。

name = mappedData.Where(o => o.ID == id).Select(p => p.Name).ToString();
role = mappedData.Where(o => o.ID == id).Select(p => p.Role).ToString();

但我沒有得到變量中的值。 相反,我得到了這個。

System.Linq.Enumerable+WhereSelectListIterator`2[Test.Lib.Model.MappingField,System.String]

我在這里想念什么? 任何幫助將非常感激。

目前您正在嘗試將 object 轉換為字符串。 您可以使用name = mappedData.FirstOrDefault(o => o.ID == id).Name;

您正在嘗試使用.ToString()將可枚舉轉換為字符串,這將不起作用

您可以只查詢映射。

var result = mappedData.FirstOrDefault(o => o.ID == id);

if(result != null) // did it find anything?
{
    Console.WriteLine(result.Name);
    Console.WriteLine(result.Role);       
}

暫無
暫無

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

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