c# - 尝试将我的模型转换为 IEnumerable<Model>

标签 c# asp.net-mvc linq asp.net-mvc-4 ienumerable

在我的 MedicalProductController我正在尝试转换 MedicalProduct (模型类)将“产品”命名为 IEnumerable<MedicalProduct>所以它可以传递给GetMedicalProductViewModelList ,这将返回一个 IEnumerable<MedicalProductViewModel> ( View 模型类)。

我试图将 SQL 调用保持在最低限度。根据其他 stackoverflow 成员的建议。

但是“product”没能变成IEnumerable<MedicalProduct>在我的 MedicalProductController

医疗产品 Controller

public class MedicalProductController : Controller
{
    private MvcMedicalStoreDb _db = new MvcMedicalStoreDb();

    // other CRUD code omitted for brevity.

    // =============
    // Edit HttpGet
    // =============

    public ActionResult Edit(int id = 0)
    {
        MedicalProduct product = _db.Products.Find(id);
        if (product == null)
        {
            return HttpNotFound();
        }
        var productList = product as IEnumerable<MedicalProduct>;
        var viewModelList = GetMedicalProductViewModelList(productList);
        return View(viewModelList);
    }

    // =============
    // Edit HttpPost
    // =============

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit(MedicalProduct product)
    {
        if (ModelState.IsValid)
        {
            _db.Entry(product).State = EntityState.Modified;
            _db.SaveChanges();
            return RedirectToAction("Index");
        }

        var productList = product as IEnumerable<MedicalProduct>;
        var viewModel = GetMedicalProductViewModelList(productList);
        return View(viewModel);
    }

    // =====================
    // Mapper Class Helper
    // =====================

    public IEnumerable<MedicalProductViewModel> GetMedicalProductViewModelList(IEnumerable<MedicalProduct> productList)
    {
        var brandList = _db.Brands.ToArray();

        var mapper = new MedicalProductMapper();

        return mapper.MapMedicalProductViewModel(productList, brandList);            
    }

为了以防万一,这里是映射类:

医疗产品映射器

public class MedicalProductMapper
{

    // =====================
    // Model to ViewModel
    // =====================

    public IEnumerable<MedicalProductViewModel> MapMedicalProductViewModel(IEnumerable<MedicalProduct> medicalProductList, IEnumerable<Brand> brandList)
    {
        var brandSelectListItem = brandList.Select(b => new SelectListItem()
                                                {
                                                    Text = b.Name,
                                                    Value = b.Name
                                                });

        var viewModelList = medicalProductList.Select(p => new MedicalProductViewModel() 
                                {
                                    BrandID = p.BrandID,
                                    BrandName = brandList.SingleOrDefault(b => b.ID == p.BrandID).Name,
                                    BrandSelectListItem = brandSelectListItem,
                                    ID = p.ID,
                                    Price = p.Price,
                                    Name = p.Name
                                });



        return viewModelList;
    }

    // =====================
    // ViewModel to Model
    // =====================

    public MedicalProduct MapMedicalProduct(MedicalProductViewModel VM)
    {
        var model = new MedicalProduct()
        {
            Name = VM.Name,
            Price = VM.Price,
            BrandID = VM.BrandID
        };

        return model;
    }
}

最佳答案

代替

var productList = product as IEnumerable<MedicalProduct>;

尝试

var productList = new List<MedicalProduct> { product };

你不能转换到IEnumerable<MedicalProduct>如果它不是 IEnumerable ,我在这个例子中所做的是首先创建一个类型为 MedicalProduct 的新列表然后将产品添加到列表中。

List是实现IEnumerable的类型之一

关于c# - 尝试将我的模型转换为 IEnumerable<Model>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19105091/

相关文章:

c# - 如何在 .NET 中以编程方式重新启动 Windows 服务

c# - 如何在 Linq to sql 中使用表提示

asp.net-mvc - 防止 JsonResult 自动格式化日期

asp.net-mvc - Html.Hidden 字段未设置

c# - 获取给定时间间隔和步长的日期范围

c# - 在 c# 中如何使用 String.Format 作为数字并用零填充,所以它总是 6 个字符

c# - 提取链接正则表达式 c#

jquery $.post 获取从方法返回的字符串

c# - INNER JOIN 中的 LINQ 条件复合键

c# - check exists before add to list 和 linq 中的 distinct 之间的性能