[英]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.