使用for-loop检查list元素是否等于列表中的任何其他元素

时间:2014-05-21 18:32:12

标签: c# asp.net-mvc for-loop

我正在上课:

public class SortOrderModel
{
    public string IdSort { get; set; }
    public List<ContentPage> ContentPages { get; set; }
}

具有listpropery的上述类是此类的列表:

public class ContentPage
{
public string Id { get; set; }
public string ParentReference { get; set; }
public string Url { get; set; }
public int SortOrder { get; set; }
public string Title { get; set; }
}

我正在使用这个for循环,将视图中的类SortOrderModel作为@model。 我现在要检查第一个if语句:如果Model.ContentPages [i] .ParentReference等于整个Model.ContentPages列表中的Any Url-propery。我尝试了很多方法,但不知道如何解决它。

            for (int i = 0; i < Model.ContentPages.Count; i++)
            {
            <ul>
                    if (Model.ContentPages[i].ParentReference == TODO) <-------
                    {
                        <li style="padding-left: 80px;">@Model.ContentPages[i].Title @Html.TextBoxFor(o => Model.ContentPages[i].SortOrder, new { @class = "sortBox" })</li>

                    }
                    else
                    {
                        <li style="padding-left: 40px;">@Model.ContentPages[i].Title @Html.TextBoxFor(o => Model.ContentPages[i].SortOrder, new { @class = "sortBox" })</li>

                    }

            </ul>
            }

1 个答案:

答案 0 :(得分:2)

尝试:

if (Model.ContentPages.Any(m => m.Url == Model.ContentPages[i].ParentReference))

但是请注意延迟加载和多个枚举。如果尚未查询所有项目,则每次调用不同的变体时,CountAny等内容都会导致新的查询。但是,如果先将Model.ContentPages强制转换为列表,则计数和其他LINQ查询将在已查询的内存列表中运行。例如:

var contentPages = Model.ContentPages.ToList();
for (int i = 0; i < contentPages.Count(); i++)
{
    <ul>
        if (contentPages.Any(m => m.Url == contentPages[i].ParentReference))
        {
            ...