2016-04-26 14 views
2

私はプログラムをc#で作成し、automapperをmapに使用しました。Null代入を使用しましたが、結果に与えられた値を代用していません。私の結果が8099000078と表示されるようにします。私のNull代入がオートマトンで動作しない理由

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using Automapper; 

namespace Automapper 
{ 
    public class User 
    { 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     public string Address { get; set; } 
     public string Mobile { get; set; } 
    } 
    public class Patient 
    { 
     public string Name { get; set; } 
     public string Location { get; set; } 
     public int age { get; set; } 
     public string phone { get; set; } 


     static void Main(string[] args) 
     { 
      User obj = new User(); 
      obj.FirstName = "sujit"; 
      obj.LastName = "kumar"; 
      obj.Address = "Bangalore"; 
      obj.Mobile = ""; 

      AutoMapper.Mapper.CreateMap<User, Patient>().ForMember(
       emp => emp.Name, map => map.MapFrom(p => p.FirstName + " " + p.LastName)) 
       .ForMember(dest => dest.Location, source => source.MapFrom(x => x.Address)) 
       .ForMember(dest => dest.phone, source => source.NullSubstitute("8099000078")); 

      var result = AutoMapper.Mapper.Map<User, Patient>(obj); 

      // Console.WriteLine(result.Name); 
      // Console.WriteLine(result.Location); 
      Console.WriteLine(result.phone); 
      Console.ReadLine(); 

     } 
    } 
} 
+0

あなたが正しい名前空間を使用できないような誤植をするのは非常に簡単です(liあなたは 'using'ブロックで行います)。 –

答えて

1

あなたはnull代用がどのように機能するか忘れました。 AutoMapper Wikiから

ヌル置換は、ソース値が 体鎖に沿って任意の場所にヌルであるかどうか 先部材の代替値を指定することを可能にします。

コードでは、phoneプロパティのソースを指定していないため、nullをチェックする値はなく、NULL置換は実行されません。

私は(下記参照)それが動作するために、あなたのコード内のいくつかの変更を加えました:

ここ
void Main() 
{ 
    User obj = new User(); 
    obj.FirstName = "sujit"; 
    obj.LastName = "kumar"; 
    obj.Address = "Bangalore"; 
    obj.Mobile = null; 

    var config = new MapperConfiguration(cfg => cfg.CreateMap<User, Patient>() 
     .ForMember(emp => emp.Name, map => map.MapFrom(p => p.FirstName + " " + p.LastName)) 
     .ForMember(dest => dest.Location, source => source.MapFrom(x => x.Address)) 
     .ForMember(dest => dest.phone, source => source.MapFrom(x => x.Mobile)) 
     .ForMember(dest => dest.phone, source => source.NullSubstitute("8099000078"))); 

    var mapper = config.CreateMapper(); 
    var result = mapper.Map<User, Patient>(obj); 

    result.Dump(); 
} 

public class User 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Address { get; set; } 
    public string Mobile { get; set; } 
} 
public class Patient 
{ 
    public string Name { get; set; } 
    public string Location { get; set; } 
    public int age { get; set; } 
    public string phone { get; set; } 
} 

私はphoneプロパティのソースを提供(私はMobileからそれをマッピングされた)とnull値を設定します。

私は前にAutomapperを使用していませんでしたが、あなたの構文を見て、あなたが(したがって(NullSubstituteを持つことはありません有効なOBJにそれを渡すため、「ソース」はnullになることはないように見える
0

)を返す8099000078.

I 。あなたがDEST => dest.phone、ソース=> source.Mobileをマップしようとしている場所を確認していない

1

をこれは動作するはずです - 私は名前空間 `Automapper`を使用することはありません手始めに

.ForMember(dest => dest.phone, source => source.MapFrom(a => !string.IsNullOrWhiteSpace(a.Mobile) ? a.Mobile : "8099000078")); 
+0

こんにちは、それはうまく動作しますが、私はそれがNullSubstituteで動作する必要があります、あなたはこれのための任意のソリューションを提供することができます。 –

+0

私はそれを確かに調べます –

+0

ありがとうAmit .. –

関連する問題