2

目标

将属性和值添加到列表。我正在使用 C#/MVC 4/Razor。

问题

我有以下内容:

return PartialView("_CategoriesList", db.bm_product_categories.ToList());

好的,这里一切顺利。我的列表从数据库中返回了多个列,其中之一是Category_Name. 我想用 C# “slugify”每个类别名称,然后传递给查看。我在想这样的事情:

foreach (var categorySlug in db.bm_product_categories)
{
    db.bm_product_categories
       .Add({
              "Category_Name_Slugged":
              Helpers.Slugify(db.bm_product_categories.Category_Name)
           });
}

但是,很明显,这种语法是错误的——我不知道该怎么做。

想法?

4

3 回答 3

2

You can use something like this , if you can make a copy of the data and work

var sluggifiedList = (from category in db.bm_product_categories  
select category.CategoryName.Slugify()).ToList();  

else

(from categoryName in db.bm_product_categories.CategoryName      
select categoryName).ToList().ForEach  
(category_Name => category_Name = category_Name.Slugigy());
于 2013-06-14T14:34:04.617 回答
1

您可以使用 LINQ 投影更改后的模型,例如:

var sluggifiedProjection = 
  db.bm_product_categories
    .ToList() // Need to materialize here. Ensure any filters applied before this.
    .Select(cat => new 
      {
        CategoryNameSlugged = Helpers.Slugify(cat.Category_Name) 
        // .. + other fields of bm_product_categories needed by your view
      });

 return PartialView("_CategoriesList", sluggifiedProjection);

创建一个匿名类的列表 - 您显然也可以创建一个新的类型ViewModelCategoryNameSlugged并与您的视图共享该类。另请参阅我可以将匿名类型传递给我的 ASP.NET MVC 视图吗?

更新

根据链接的帖子,您可以将投影保留为匿名,然后在 Razor 视图中,使用动态或反射来访问CategoryNameSlugged列表中的属性,或者(并且最好),您可以使用强类型ViewModel类:

internal class SluggedCategoriesViewModel
{
    public string CategoryNameSlugged {get; set; }
    // Add any other properties from bm_product_categories that your view needs, e.g.
    public int CategoryId {get; set; }
}

并且投影现在使用强类型ViewModel类:

  .Select(cat => new SluggedCategoriesViewModel
    {
      CategoryNameSlugged = Helpers.Slugify(cat.Category_Name),
      CategoryId = cat.Category_Id // etc
    });
于 2013-06-14T14:25:37.500 回答
0
List<bm_product_categories> list = new List<bm_product_categories>();

foreach(string name in list.Select(x => x.Category_Name))
{ 
    slugifiedList.Add(name.Slugify()); // make extension method
}

或复制List<bm_product_categories>并更改 Category_Name 属性

于 2013-06-14T14:19:47.953 回答