2009-08-17 14 views
2

Ich habe Probleme mit ausgewählten Objekten in einer Auswahlliste.SelectlistItem selected = true Problem

Product product = _pr.GetProducts().ByProductID(productID).First(); 
     product.Categories.Load(); 
     ICollection<Category> allCategories = _cr.GetCategories().ToList(); 

     List<SelectListItem> Categories = (from category in allCategories 
              select 
              new SelectListItem 
              { 
               Selected = product.Categories.Contains(category), 
               Value = category.CategoryID.ToString(), 
               Text = category.Categoryname 
              }).ToList(); 

Kategorien Rückkehr 4 Elemente und ausgewählt ist falsch auf alle ....... Wenn ich „product.Categories“ schweben gibt es 3 Elemente gibt, die richtig ist .... aber es irgendwie tut werde auf wahr gesetzt.

Was könnte falsch sein? /M

Antwort

1

Die Überlastung von Contains(), die Sie verwenden den Standard-Objektvergleich verwenden wird, die nur genau die gleiche Instanz übereinstimmen, wenn Sie Equals() und GetHashCode() außer Kraft gesetzt haben. Eine Option besteht darin, eine benutzerdefinierte CategoryEqualityComparer zu erstellen und an this overload of Contains() zu übergeben. Oder, Sie könnten nur die Kategorien auf ID:

Product product = _pr.GetProducts().ByProductID(productID).First(); 
product.Categories.Load(); 
ICollection<Category> allCategories = _cr.GetCategories().ToList(); 

List<SelectListItem> Categories = (
    from category in allCategories 
    join pc in product.Categories 
     on category.CategoryID equals pc.CategoryID into j 
    select 
    new SelectListItem 
    { 
     Selected = j.Any(), 
     Value = category.CategoryID.ToString(), 
     Text = category.Categoryname 
    }).ToList(); 
+0

verdammt .. du schlägst mich um 14 Sekunden :) – sirrocco

0

Ich sehe, dass Sie 'allCategories' zu einer _cr.GetCategories-Sammlung setzen - Sind Sie sicher, dass das Produkt Kategorien aus dieser Sammlung enthält? Es scheint, dass das Feld Kategorien keine der Produktkategorien enthält. Können Sie posten, was in jeder Sammlung ist?

+0

Gibt es einen einfachen Trick in Visual Studio, das zu tun? –

+0

Ich bin mir nicht sicher, ich denke nicht. Sie können eine foreach() - Schleife verwenden und sie einfach an die Konsole drucken. – shanabus

Verwandte Themen