繁体   English   中英

在Lambda表达式中使用Distinct并在foreach循环中使用它

[英]Using Distinct in Lambda Expression and use it in foreach loop

在这里,我试图首先获得唯一的主要类别名称,即该主要类别中可用的品牌以及该特定品牌和主要类别的子类别下的名称。 但与众不同的是无法正常工作并返回所有值。 这是模型的代码。

public MvcHtmlString Submenu()
        {
            var products = _db.Products;
            var sb = new StringBuilder();

                sb.Append("<ul>");
                var mainmenu = products.Select(p => p.MainCategory).Distinct();
            if(mainmenu!= null)
            {
                int i = 0;
                foreach (var prods in products)
                {
                    i++;
                    sb.AppendFormat("<li><a  class=\"main-link\" href=\"#\">{0}</a>\n", prods.MainCategory);
                    var brans = products.Where(p => p.MainCategory == prods.MainCategory).Select(p => p.Brand).Distinct();
                    if (brans != null)
                    {
                        int j = 0;
                        foreach (var prodss in products)
                        {
                            j++;
                            sb.Append("<ul>");
                            sb.AppendFormat("<li><a  class=\"main-link\" href=\"#\">{0}</a>\n", prodss.Brand);
                            //var subCats = _db.Products.SqlQuery("Select Distinct(SubCategory) from Product where MainCategory = '" + mainmenu + "' && Brand = '"+brans+"'");
                            var subCats = products.Where(p => p.MainCategory == prods.MainCategory && p.Brand == prodss.Brand).Select(p => p.SubCategory).Distinct();
                            if (subCats != null)
                            {
                                int k = 0;
                                foreach (var pods in products)
                                {
                                    k++;
                                    sb.Append("<ul>");
                                    //sb.AppendFormat("<li><a   href=\"#\">{0}</a></li>\n", pods.SubCategory);
                                    sb.Append("</ul>");
                                }
                            }
                            sb.Append("</li>");
                            sb.Append("</ul>");
                        }
                    }
                }
                sb.Append("</li>");
            }
            sb.Append("</ul>");
            return new MvcHtmlString(sb.ToString());
        }

请指导我

您需要为您的Product类重写Equals和GetHashCode,但是我认为您只想按产品的名称或ID进行区分,因此可以尝试以下扩展方法:

public static IEnumerable<TSource> DistinctBy<TSource, TKey>(this IEnumerable<TSource> that, Func<TSource, TKey> selector)
{
    var set = new HashSet<TKey>();
    foreach (var element in that)
    {
        if (set.Add(selector(element)))
        {
            yield return element;
        }
    }
}

暂无
暂无

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

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