通过加入获取类别中的产品列表

时间:2018-02-09 14:08:56

标签: c# linq automapper entity-framework-core

我希望在此操作方法中使用查询获取产品列表,然后使用AutoMapper将其映射到let screenPoint = sceneView.projectPoint(my3dNode) IEnumerable

ViewModelProduct

模型看起来像这样:

private async Task<IEnumerable<ViewModelProduct>> GetProductsAsync(int id)
{
    if (id == 0)
    {
        return null;
    }
    else
    {
        var category = _context.ProductCategories.Where(p => p.Id == id).FirstOrDefault();
        if (category != null)
        {
            var products = await (from c in _context.ProductsInCategories
                                  join p in _context.Products
                                  on c.ProductId equals p.Id
                                  where c.ProductCategoryId == category.Id
                                  select p).ToListAsync();
            var VMProducts = _mapper.Map<IEnumerable<ViewModelProduct>>(products);
            return VMProducts;
        }
        else
        {
            return null;
        }
    }
}

我的映射配置文件如下所示:

public class Product
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Info { get; set; }
    public decimal Price { get; set; }
    public List<FrontPageProduct> InFrontPages { get; set; }
    public List<ProductInCategory> InCategories { get; set; }
}

public class ProductInCategory
{
    public int Id { get; set; }
    public int ProductId { get; set; }
    public int SortOrder { get; set; }
    public int ProductCategoryId { get; set; }
    public Product Product { get; set; }
    public ProductCategory ProductCategory { get; set; }
    public FrontPageProduct FrontPageProduct { get; set; }
}

public class ViewModelProduct
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Info { get; set; }
    public decimal Price { get; set; }
    public int SortOrder { get; set; }
    public IEnumerable<ViewModelFrontPageProduct> InFrontPages { get; set; }
    public IEnumerable<ViewModelCategoryWithTitle> Categories { get; set; }
}

但是,我从AutoMapper收到此消息:

  

ProductInCategory - &gt; ViewModelProduct(目标成员列表)   MyStore.Models.ProductInCategory - &gt; MyStore.Models.ViewModels.ViewModelProduct(目标成员列表)

     

未映射的属性:

     

标题

     

信息

     

价格

     

InFrontPages

     

分类

     

AutoMapper.ConfigurationValidator.AssertConfigurationIsValid(IEnumerable typeMaps)

     

AutoMapperMappingException:错误映射类型。

     

映射类型:   列表CreateMap<Product, ViewModelProduct>(); 1   System.Collections.Generic.List 1 -> IEnumerable 1 [[MyStore.Models.ViewModels.ViewModelProduct,MyStore,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]

我是否错过了地图,或者我的查询是否已关闭?

1 个答案:

答案 0 :(得分:1)

该例外表明它正在尝试将ProductInCategery的列表转换为ViewModel而不是Product

正如评论中所述,将var更改为List<Product>可解决问题。如果没有看到您的确切设置,我就无法知道为什么选择了错误的类型,但这会导致隐式转换问题。

很高兴它得到了修复! :)