繁体   English   中英

检查列表是否包含多个指定值

[英]Check to see if a list contains more than one specified value

我有一个名为blogCategoriesList(类型为字符串)的列表,其中填充了每个Blog类别的值,因为它通过检查category下拉属性中定义的值在每个页面中循环。 因此,如果我的网站上有三篇博客文章,并且类别定义为足球,飞镖,飞镖,则列表将包含这些内容。

我正在尝试进行if检查以验证是否

  • 该列表包含与当前页面相同类别的值
  • 该列表包含多个条目,该条目与当前页面的类别相同

例子

BlogCategoriesList =足球,飞镖,飞镖

如果我在将类别设置为飞镖的页面上,则应该通过if测试,因为该列表包含飞镖,并且列表中也有多个飞镖条目。

BlogCategoriesList =足球,计算,飞镖

如果我在将类别设置为飞镖的页面上,则if测试将失败,因为该列表包含飞镖,但是列表中没有多个飞镖条目。

我一直在尝试使用以下使用groupby的代码,但目前仍在努力使其工作。

@if (blogCategoriesList.Contains(Model.Content.GetPropertyValue("category")) && blogCategoriesList.GroupBy(n => n.Equals(Model.Content.GetPropertyValue("category"))).Any(c => c.Count() > 1))

任何帮助都会很棒

非常感谢

保罗

编辑*,因此使用以下建议,我已将代码更新为

 @if (blogCategoriesList.Contains(@Model.Content.GetPropertyValue("category")) && blogCategoriesList.Where(x => x == @Model.Content.GetPropertyValue("category")).Count() > 1)

 @if (blogCategoriesList.Contains(@Model.Content.GetPropertyValue("category")) && blogCategoriesList.Where(x => x == @Model.Content.GetPropertyValue("category")).Skip(1).Any())

但是现在我的if测试总是失败并且没有任何意义。 当前页面是类别计算。 您可以从我的调试中看到类别列表中有多个计算值

在此处输入图片说明

如果名单很长

  if (blogCategoriesList.Where(c => c == category).Skip(1).Any()) {
    ...
  }

它将比Count解决方案更快:无需计算确切的项目 (例如1234567 ),只需知道该数字超过1

Umbraco的@Model.Content.GetPropertyValue()返回类型为object

这会导致您的比较(以及您的代码)失败,请参阅在c#中比较字符串和对象以及此小演示:

var stringList = new List<string>
{
    "foo",
    "bar",
};

// prevent string interning, which will cause reference equality to be true
object needle = "fo";
needle = (string)needle + "o"; 

bool listContainsNeedle = stringList.Contains(needle);

var needleInList = stringList.Where(s => s == needle).ToList();

现在listContainsNeedle将为true (因为它实际上进行了字符串比较),但是needleInList将具有0个条目,因为它会测试引用是否相等。

要以字符串形式获取属性,请使用GetPropertyValue<string>() ,这将使您的代码正常工作。 或者,将针明确地穿线:

Where(s => s == (string)needle)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM