Как преобразовать оператор foreach в LINQ, используя C# - PullRequest
0 голосов
/ 14 июля 2020

Я хочу преобразовать оператор foreach в LINQ в C#.

  • Существует класс с именем Unit с тремя атрибутами A, B и C.

  • Существует List<Unit> называется GetUnit.

Следующий код:

  • , чтобы найти значение C, если A равно string и
  • присвоить C string,

Это можно ли преобразовать его в оператор LINQ?

foreach (Unit item in GetUnit)
{
    if (item.A == "This is a string")
    {
        string AAA = item.C;
    }
}

Ответы [ 4 ]

4 голосов
/ 14 июля 2020

Вы можете сделать:

var AAA = GetUnit.FirstOrDefault(item => item.A == "This is a string")?.C;

при условии, что вы ожидаете только одно совпадение, но ... лично я бы просто использовал foreach и if.

(примечание: ?.C здесь возвращает null, если совпадений нет, или .C совпадений, найденных в противном случае)

1 голос
/ 14 июля 2020

Вы хотите найти элементы , где свойство A соответствует This is a string и из каждого совпадения выбирает их свойство C, следовательно:

var strings = GetUnit()
    .Where(i => i.A == "This is a string")
    .Select(i => i.C);
0 голосов
/ 14 июля 2020

Помимо приведенных ответов, вы можете прочитать или следовать этим двум ресурсам, чтобы получить знания:

0 голосов
/ 14 июля 2020

Расширение Mar c Ответ Гравелла, вы можете использовать оператор объединения с нулевым значением , например:

var AAA = GetUnit.FirstOrDefault(item => item.A == "This is a string")?.C ?? "Nothing found";

или даже

var AAA = GetUnit.FirstOrDefault(item => item.A == "This is a string")?.C ?? throw new Exception("Nothing found");

Конечно, вы должны генерировать более описательное исключение, соответствующее вашему варианту использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...