2012-04-02 182 views
0

我想第一次使用AutoMapper並遇到一些問題。 我的代碼在下面,我得到下面的錯誤。也許有人可以展示如何映射模型列表?AutoMapper映射模型列表

cannot convert from 'System.Linq.IQueryable<AnonymousType#1>' to 'Entity.Product' C:\Users\Administrator\Projects\PC\trunk\PC\Controllers\AdminController.cs 37 100 PC 

public class ProductViewModel 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public int UsersCount { get; set; } 
} 

var products = _repository.GetProducts(true).Select(p=> new 
                    { 
                    p.Id, 
                    p.Name, 
                    UsersCount = 0 

                    }); 

     Mapper.CreateMap<Product, ProductViewModel>(); 
     ViewData["Products"] = Mapper.Map<IEnumerable<Product>, IEnumerable<ProductViewModel>>(products); //Error appears on products object 


//Product domain model(linq2sql generated model) 
public partial class Product : INotifyPropertyChanging, INotifyPropertyChanged 
    { 

     private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty); 

     private int _Id; 

     private bool _Active; 

     private System.Nullable<int> _Sort; 

     private System.Nullable<int> _Category; 

     private string _Name; 

     private int _ProductTypeId; 

     private decimal _Price; 

     private System.Nullable<int> _Months; 

     private System.Nullable<int> _Credits; 

     private string _Features; 

     private string _BlockReason; 

     private string _BuyUrl1; 

     private string _BuyUrl2; 

     private bool _UsersManager; 
} 

回答

3

在您的LINQ查詢中,您選擇一個匿名對象。確保你選擇了一個產品,它是你的源類型(或者更具體地說IEnumerable<Product>):

IEnumerable<Product> products = _repository.GetProducts(true); 
IEnumerable<ProductViewModel> productsViewModel = Mapper.Map<IEnumerable<Product>, IEnumerable<ProductViewModel>>(products); 
return View(productsViewModel); 

也不要叫Mapper.CreateMap<TSource, TDest>你的控制器動作裏面。在AppDomain的生命週期中,只能調用一次,最好在Application_Start中調用。

另外請注意,我已經擺脫了ViewData這是一件好事。你不需要ViewData。您正在使用視圖模型。這就是他們應該做的。以強類型的方式包含您的視圖所需的信息。

+0

我需要創建計算字段的UsersCount字段。在上面的例子中,我只是分配UsersCount = 0,但在真實應用程序中,我需要計算用戶並將其分配給UsersCount屬性。也許我的設計錯了?如何改變它? – Tomas 2012-04-02 13:07:10

+0

我不知道你的設計是什麼,所以我可以告訴你它是否有錯。這個字段是如何計算的?您的域模型中的哪些信息取決於它?你的'Product'域模型是怎樣的? – 2012-04-02 13:08:31

+0

我的數據庫看起來像產品 - >用戶。當我在GetProducts方法中使用linq to sql查詢產品時,我得到產品列表。之後,我需要計算分配給指定產品的用戶數量。所以我添加新的字段UsersCount,我將linq添加到sql查詢到這個字段來執行用戶計數。 – Tomas 2012-04-02 13:11:13