Как получить значение поля из лямбда-выражения для ForEach ()? - PullRequest
0 голосов
/ 17 июня 2020

У меня есть сопоставление json, которое выглядит, как показано ниже.

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

Мне нужно сравнить поле ID с тем, которое я получаю на входе, и получить соответствующие значения Name и Role. Я добился того же через ниже.

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;
    }
}

Я считаю, что это можно сделать более простым способом с помощью лямбда-выражения. И вот что я пробовал ниже.

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]

Что я отсутствует здесь? Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

2 голосов
/ 17 июня 2020

Вы пытаетесь преобразовать перечислимое в строку, используя .ToString(), это не сработает

Вы можете просто запросить отображение.

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

if(result != null) // did it find anything?
{
    Console.WriteLine(result.Name);
    Console.WriteLine(result.Role);       
}
2 голосов
/ 17 июня 2020

В данный момент вы пытаетесь преобразовать объект в строку. Вы можете использовать name = mappedData.FirstOrDefault(o => o.ID == id).Name;

...