比较列表中列表的属性

问题描述 投票:0回答:2

描述
我的目标是比较

menuList
中的菜单对象的语言。由于
menuList
将语言作为另一个列表提供,这使得它变得更加复杂。因此,我尝试创建一个具有相同值的新类对象,以便我可以使用 menuList.Languages.Contains(languageObject),但是我很快发现这不起作用。我尝试在 for 循环中创建一个 for 循环,但这也不起作用,但从我这边来看可能是失败。

显然我不能写这样的东西:

MenuList.Languages.Name.Equals("English").

因此,我正在寻找一种解决方案,可以检查菜单列表中语言列表的属性名称是否等于我选择的值。

物体

private LanguageBox LangEng = new LanguageBox
{
    IsoCode = "eng",
    Name = "English"
};

名单

var MenuList = menuDataClient.GetMenuByCity(city)
    .Select(nap => new MenuBox()
    {
        Menu = nap.Menu,
        Languages = nap.Languages
            .Select(lang => new LanguageBox()
            {
                IsoCode = lang.IsoCode,
                Name = lang.Name
            }).ToList()
    })
    .ToList();

循环

for (int i = 0; i < MenuList.Count; i++)
{
   if (MenuList[i].Languages.Contains(LangEng))
   {
      System.Console.WriteLine("Success");
   }
}
c# .net list oop string-comparison
2个回答
1
投票

也许 linq 的Where 可以解决这个问题?喜欢某事:

foreach(var item in MenuList)
{
   var x = item.Languages.Where(obj => obj.Name == <desired language>);
   if (x.Count() > 0)  
   {
       //Success code
       break;
   }
}

0
投票

我找到了解决办法。如果您只想保留列表中语言列表中包含英语或俄语的元素,则此 LINQ 选项有效。

解决方案

.Where(lang => lang.Languages.Any(any => any.Name.Equals("English") || any.Name.Equals("Russian"))) 
© www.soinside.com 2019 - 2024. All rights reserved.