在视图

时间:2018-02-07 09:44:15

标签: c# asp.net-core-mvc

我正在尝试呈现链接列表,图标应该会发生变化,具体取决于是否在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; }
}

2 个答案:

答案 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>
    }
}