我正在尝试呈现链接列表,图标应该会发生变化,具体取决于是否在IEnumerable
内找到了项目ID。
到目前为止,这是我观点的相关部分:
@{
if (product.InFrontPages.Contains(item.ParentCategory.Id))
{
<span class="glyphicon glyphicon-checked"></span>
}
else
{
<span class="glyphicon glyphicon-unchecked"></span>
}
}
这会导致编译时错误:
'IEnumerable'不包含'Contains'的定义,最好的扩展方法重载'ParallelEnumerable.Contains(ParallelQuery,int)'需要一个'ParallelQuery'类型的接收器
我想我可能想要实施the accepted answer to this question,但我还没弄明白该怎么做。当他建议实施通用接口时,我不明白Jon的意思。
涉及的视图模型:
public class ViewModelProduct
{
public int Id { get; set; }
public string Title { get; set; }
public string Info { get; set; }
public decimal Price { get; set; }
public int SortOrder { get; set; }
public IEnumerable<FrontPageProduct> InFrontPages { get; set; }
public IEnumerable<ViewModelCategoryWithTitle> Categories { get; set; }
}
public class ViewModelProductCategory
{
public int Id { get; set; }
public int? ParentId { get; set; }
public string Title { get; set; }
public int SortOrder { get; set; }
public string ProductCountInfo
{
get
{
return Products != null && Products.Any() ? Products.Count().ToString() : "0";
}
}
public IEnumerable<FrontPageProduct> FrontPageProducts { get; set; }
public ViewModelProductCategory ParentCategory { get; set; }
public IEnumerable<ViewModelProductCategory> Children { get; set; }
public IEnumerable<ViewModelProduct> Products { get; set; }
}
答案 0 :(得分:6)
问题是Contains
LINQ方法没有您期望的签名 - 您正在尝试检查IEnumerable<FrontPageProduct>
是否包含int
..它不能,因为它只有FrontPageProduct
个引用。
我怀疑你想要这样的东西:
if (product.InFrontPages.Any(page => page.Id == item.ParentCategory.Id)
(我可能会使用条件运算符而不是if
语句,但这是另一回事。)
答案 1 :(得分:0)
这样做的一种方法是使用lamda表达式。像这样的东西
@{
if (product.InFrontPages.Contains(c => c.ParentCategory.Id == item.ParentCategory.Id))
{
<span class="glyphicon glyphicon-checked"></span>
}
else
{
<span class="glyphicon glyphicon-unchecked"></span>
}
}