【问题标题】:Add property and value to C# List将属性和值添加到 C# 列表
【发布时间】:2013-06-14 14:05:43
【问题描述】:

目标

将属性和值添加到列表。我正在使用 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)
           });
}

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

想法?

【问题讨论】:

    标签: c# asp.net-mvc-4 razor


    【解决方案1】:

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

    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());
    

    【讨论】:

    • 投反对票的人非常聪明,可以在几秒钟内破译。
    • 你好。在我看来,我的模型是@model IEnumerable<BluMercados.Models.Data.bm_product_categories>——现在,它会是这样吗?
    • 我认为你不必太担心在哪里放置这个内部类,你可以创建一个新的 cs 文件并放置这个代码或在任何现有文件中添加这个新类,当然在同一个项目
    • @srsyogesh 我的问题是:我必须在视图的第一行添加什么?
    • 我还没有学过 asp.net :( 所以我不确定在视图中指定什么。
    【解决方案2】:

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

    创建一个匿名类的列表 - 您显然也可以为 CategoryNameSlugged 创建一个新类型的 ViewModel 类,并与您的视图共享该类。另见Can I pass an anonymous type to my ASP.NET MVC view?

    更新

    根据链接的帖子,您可以将投影保留为匿名,然后在 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
        });
    

    【讨论】:

    • .Category_Name from db.bm_product_categories 未找到 - 我该怎么办?
    • 哦,斯图尔特,谢谢!但是我的Slugify() 方法有问题:LINQ to Entities does not recognize the method 'System.String Slugify(System.String)' method, and this method cannot be translated into a store expression.。您对此有何看法?
    • 又是我的错……您需要在投影之前实现您的 db.bm_product_categories。已更新。
    • 没问题,斯图尔特。但是,在我看来,模型将如何?
    • 哦,谢谢!非常感谢,真的!最后一个问题:这个内部类——放在什么地方最好?
    【解决方案3】:
    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&lt;bm_product_categories&gt; 并更改 Category_Name 属性

    【讨论】:

      猜你喜欢
      • 2021-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-30
      • 2014-05-07
      相关资源
      最近更新 更多