Проверка, соответствует ли значение свойства предопределенному значению в списке объектов. - PullRequest
0 голосов
/ 15 октября 2018

У меня есть два класса, как это

public class Stock
{
    public StockItem Item;

    public string Location;

    public int Quantity;

    public string Price;
}

public class StockItem
{
    public string Code;

    public string Name;

    public string Unit;
}

И у меня есть список, который содержит несколько экземпляров Stock класса

var stockList = new List<Stock>();

Я пытаюсь определить, является ли Name свойство каждого экземпляра в списке равно предопределенной строке.В настоящее время я перебираю список, подобный этому

foreach (var stock in stockList)
{
    if (stock.Item.Name.ToLower() == "test")
    {
        Console.WriteLine("Found the class")

        break;                      
    }
}

Однако мне было интересно, есть ли более эффективный способ сделать это, используя Linq или что-то похожее на метод .Contains.Есть ли более простой или эффективный способ сделать это?

Ответы [ 5 ]

0 голосов
/ 15 октября 2018

Вы можете получить желаемый результат, позвонив Any

bool result = stockList.Any(
    stock => stock.Item.Name.Equals("text", StringComparison.InvariantCultureIgnoreCase)
);

В этом коде имя параметра stock можно изменить как угодно.

0 голосов
/ 15 октября 2018

Вы действительно смотрите на все случаи?От вашего вопроса, кажется, что Any может быть путь, см. здесь .

stockList.Any(p => p.Item.Name.ToLower() == "test");

0 голосов
/ 15 октября 2018

Все в linq вернет True или false

stockList.All(p => p.Item.Name.ToLower() == "test");
0 голосов
/ 15 октября 2018

Вы можете использовать метод Linq Any():

bool containsItemName = stockList.Any(x => x.Item.Name.Equals("MyName", StringComparison.InvariantCultureIgnoreCase));
0 голосов
/ 15 октября 2018

соответствует ли свойство Name каждого экземпляра в списке предварительно определенной строке

Не намного эффективнее, но проще:

bool allAreEqual = stockList.All(x => x.Item.Name.Equals("test", StringComparison.OrdinalIgnoreCase))

Если вы вместо этогохотите найти первое, которое соответствует условию (что на самом деле делает ваш цикл):

Stock si = stockList.FirstOrDefault(x => x.Item.Name.Equals("test", StringComparison.OrdinalIgnoreCase));

Теперь вы знаете, существует ли вообще такой Stock (si != null), и вы его получили.

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