2016-12-03 15 views
0

ここでは、最初にユニークなメインカテゴリ名を取得しようとしています。そのメインカテゴリで使用可能なブランド、その特定のブランドとメインカテゴリのサブカテゴリ。しかし、distinctは動作しておらず、すべての値を返す。ここにモデルのコードがあります。ラムダ式でDistinctを使用してforeachループで使用する

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クラスのために等しく、GetHashCodeメソッドをオーバーライドする必要があるが、私はあなただけの製品の名前またはIDでの個別にしたいので、あなたがこのextenssion方法を試すことができると思い

+0

こんにちはパヴァンは[カルロの答え](http://stackoverflow.com/a/4158364/5588347)を参照してください。 –

答えて

0

を案内してください。

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; 
     } 
    } 
} 
関連する問題