将属性和值添加到 C# 列表

本文关键字:列表 添加 属性 | 更新日期: 2023-09-27 18:18:20

目标

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

问题所在

我有以下几点:

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

好的,这里一切都很好。我的列表从数据库中返回多列,其中一列是Category_Name。我想用 C# "蛊脏"每个类别名称,然后传递给视图。我在想这样的事情:

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

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

想法?

将属性和值添加到 C# 列表

你可以使用这样的东西,如果你能复制数据并工作

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

(from categoryName in db.bm_product_categories.CategoryName      
select categoryName).ToList().ForEach  
(category_Name => category_Name = category_Name.Slugigy());

可以使用 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);

创建一个匿名类的列表 - 显然你也可以创建一个新的类型化ViewModel类,用于CategoryNameSlugged并与你的视图共享这个类。参见 是否可以将匿名类型传递给我的 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
    });
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属性