2012-12-03 6 views
36

私はAutomapperを初めてアプリケーションに導入しようとしていますが、無効な引数がいくつかあるというエラーが発生しています。オブジェクトのマップのコレクション

マイモデル:

namespace StoreGradesLib.Models 
{ 
    public class Store 
    { 
     [Key] 
     public int StoreID { get; set; } 

     [Required] 
     [MaxLength(120)] 
     public string StoreName { get; set; } 

     [Required] 
     [MaxLength(20)] 
     public string StoreNumber { get; set; } 

     [Required] 
     [MaxLength(120)] 
     public string ManagerName { get; set; } 

     [Required] 
     public long PhoneNumber { get; set; } 

     [Required] 
     public string AddressLine1 { get; set; } 

     public string AddressLine2 { get; set; } 

     [Required] 
     public string Postcode { get; set; } 

     [Required] 
     public int WallArea { get; set; } 

     [Required] 
     public int FloorArea { get; set; } 

     [Required] 
     public int NumWindows { get; set; } 

     [Required] 
     public int NumDesks { get; set; } 

     [Required] 
     public int NumDoors { get; set; } 

     [Required] 
     public int StoreGradeID { get; set; } 

     [Required] 
     public bool Active { get; set; } 

     public virtual StoreGrade StoreGrade { get; set; } 

     [Timestamp] 
     public Byte[] Timestamp { get; set; } 
    } 
} 

マイビューモデル:

namespace StoreGradesLib.ViewModels 
{ 
    public class StoreVM 
    { 
     public int StoreID { get; set; } 
     public bool Active { get; set; } 
     public Byte[] Timestamp { get; set; } 

     [Required(ErrorMessage = "Store Name is required.")] 
     [Display(Name = "Store Name")] 
     public string StoreName { get; set; } 

     [Required(ErrorMessage = "Store Number is required")] 
     public string StoreNumber { get; set; } 

     [Required(ErrorMessage = "Store Manager is required.")] 
     [Display(Name = "Manager Name")] 
     public string ManagerName { get; set; } 

     [Required(ErrorMessage = "Contact Number is required.")] 
     [Display(Name = "Phone Number")] 
     public int PhoneNumber { get; set; } 

     [Required(ErrorMessage = "Address Line 1 is required.")] 
     [Display(Name = "Address Line 1")] 
     public string AddressLine1 { get; set; } 

     [Display(Name = "Address Line 2")] 
     public string AddressLine2 { get; set; } 

     [Required(ErrorMessage = "Postcode is required.")] 
     public string Postcode { get; set; } 

     [Required(ErrorMessage = "Must input wall area.")] 
     [Display(Name = "Wall Area")] 
     public int WallArea { get; set; } 

     [Required(ErrorMessage = "Must input floor area.")] 
     [Display(Name = "Floor Area")] 
     public int FloorArea { get; set; } 

     [Required(ErrorMessage = "Must input number of windows.")] 
     [Display(Name = "Windows")] 
     public int NumWindows { get; set; } 

     [Required(ErrorMessage = "Must input number of desks.")] 
     [Display(Name = "Desks")] 
     public int NumDesks { get; set; } 

     [Required(ErrorMessage = "Must input number of doors.")] 
     [Display(Name = "Doors")] 
     public int NumDoors { get; set; } 

     [Required(ErrorMessage = "Store must have a grade.")] 
     public StoreGrade StoreGradeID { get; set; } 

     public string Address 
     { 
      get 
      { 
       return StoreName + " " + AddressLine1 + " " + AddressLine2 + " " +     Postcode; 
      } 
     } 
    } 
} 

がマッピング作成:私のコントローラ内

CreateMap<Store, StoreVM>(); 
CreateMap<StoreVM, Store>(); 

を、私はstoreVMに店舗の選択をマップしようとしています。私は現在、私の店舗をそういうものにしています。

私はStoreVMへの店舗の選択をマッピングしたいのです
var stores = db.Store.Include(s => s.StoreGrade); 
stores = from s in db.Store.Where(s => s.Active.Equals(true)) 
       select s; 

、私は次のことを試してみましたが、私は無効なパラメータの警告を取得し、

var VMstores = Mapper.Map<Store, StoreVM>(stores); 

私は最善のオーバーロードされたメソッドというエラーが発生しますmatchに無効な引数がいくつかあります。

誰でも正しい方向に向けることができますか?

答えて

90

あなたがマッピングされているコレクションではなく、単一のエンティティ(IEnumerable<Store>IEnumerable<StoreVM>に)ため、このマッピング

var VMstores = Mapper.Map<IEnumerable<Store>, IEnumerable<StoreVM>>(stores); 
+3

感謝すごいああ!私はこれを投票しようとしましたが、それは私を許可しません、私はもっとstackoverflowを使用するように私は戻ってあなたを投票することを忘れないでください! 過去30分の間私を悩ましていました、ありがとうございました! – EverythingGeek

+2

@ user1873098ようこそ:)オートマッペを使用し始めると、同じ問題が発生しました –

+1

オートマッパヒラザ!!! – hanzolo

10

Updateを使用! Now you can do this:

var VMstores = stores.Project().To<StoreVM>(); 
+0

アップデート:将来参照するために、これらは[クエリ可能な拡張機能](https://github.com/AutoMapper/AutoMapper/wiki/Queryable-Extensions)と呼ばれ、オートマトンに含まれています。 –

関連する問題