我在选择列表中获取所选项目时遇到问题。
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();
类别返回4项,并且所有选择都是假的.......如果我悬停“product.Categories”那里有3个项目,这是正确的....但不知何故它没有设置为true 。
可能有什么问题? / M
答案 0 :(得分:1)
您正在使用的Contains()
的重载将使用默认对象比较,除非您覆盖Equals()
和GetHashCode()
,否则它只会匹配完全相同的实例。一种选择是创建自定义CategoryEqualityComparer
并将其传递给this overload of Contains()
。或者,您可以加入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();
答案 1 :(得分:0)
我看到您将'allCategories'设置为_cr.GetCategories集合 - 您确定该产品包含该集合中的类别吗?您的“类别”字段看起来不包含任何产品类别。你能发布每个集合中的内容吗?