С вашей текущей версией кода:
var listOfStuff = CalculateStuff();
foreach (var stuff in listOfStuff)
{
var items = stuff.Constants.FindAll((keyValuePair) => keyValuePair.Key == "ConstantA");
if (items.Any())
{
//**I’m having problem with LINQ here**
}
}
В случае, если вы не хотите, чтобы элементы, а только хотите проверить состояние, используйте LINQ Any
метод:
foreach (var stuff in listOfStuff)
{
if (stuff.Constants.Any((keyValuePair) => keyValuePair.Key == "ConstantA"))
{
{
//**I’m having problem with LINQ here**
}
}
}
В случае, если ваш класс Stuff
определен с использованием Dictionary
:
public class Stuff
{
public Dictionary<string, string> Constants { get; set; }
}
и использованием:
var listOfStuff = CalculateStuff();
foreach (var stuff in listOfStuff)
{
var items = stuff.Constants.Where((kvp) => kvp.Key == "ConstantA");
if (items.Any())
{
//**I’m having problem with LINQ here**
}
}
Обратите внимание, что в обоих случаях использование одинаково, что означает, что изменение List<KeyValuePair<string, string>>
на Dictionary<string, string>
не сильно повлияет на код.
И, наконец, версия, которую я предпочитаю больше всего)
Класс Stuff
будет иметь вид:
public class Stuff
{
public string StuffName { get; set; }
public int StuffValue { get; set; }
}
Далее, метод вычисления будет:
private static List<Stuff> CalculateStuff()
{
return new List<Stuff>()
{
new Stuff{StuffName = "ConstantA", StuffValue = 100},
new Stuff{StuffName = "ConstantB",StuffValue = 200}
};
}
И использование:
var listOfStuff = CalculateStuff().Where(st =>
st.StuffName == "ConstantA");
foreach (var stuff in listOfStuff)
{
Console.WriteLine($"Name: {stuff.StuffName}, Value: {stuff.StuffValue}");
}