Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# AutoMapper将两个表中的记录连接到单个IEnumerable viewmodel中_C#_Automapper - Fatal编程技术网

C# AutoMapper将两个表中的记录连接到单个IEnumerable viewmodel中

C# AutoMapper将两个表中的记录连接到单个IEnumerable viewmodel中,c#,automapper,C#,Automapper,我有两个表,分别是T1和T2T1包含oID、cID、日期、状态和T2包含cID、cName、cURL。我为以上两个表格设计了课程,如下所示: T1.cs public class T1{ public int oID{get;set;} public int cID{get;set;} public DateTime date{get;set;} public string status{get;set;} } public class T2{ public int c

我有两个表,分别是
T1
T2
<代码>T1包含oID、cID、日期、状态
T2
包含cID、cName、cURL。我为以上两个表格设计了课程,如下所示:

T1.cs

public class T1{
  public int oID{get;set;}
  public int cID{get;set;}
  public DateTime date{get;set;}
  public string status{get;set;}
}
public class T2{
    public int cID{get;set;}
    public string cName{get;set;}
    public string cURL{get;set;}

}
public class T3:T1
{
   public int cID{get;set;}
   public string cName{get;set;}
   public string cURL{get;set;}
}
T2.cs

public class T1{
  public int oID{get;set;}
  public int cID{get;set;}
  public DateTime date{get;set;}
  public string status{get;set;}
}
public class T2{
    public int cID{get;set;}
    public string cName{get;set;}
    public string cURL{get;set;}

}
public class T3:T1
{
   public int cID{get;set;}
   public string cName{get;set;}
   public string cURL{get;set;}
}
T1
中的
cID
是一个
外键
引用
T2-cID

现在我有了我的
T3
视图模型,如下组合
T1
T2

T3.cs

public class T1{
  public int oID{get;set;}
  public int cID{get;set;}
  public DateTime date{get;set;}
  public string status{get;set;}
}
public class T2{
    public int cID{get;set;}
    public string cName{get;set;}
    public string cURL{get;set;}

}
public class T3:T1
{
   public int cID{get;set;}
   public string cName{get;set;}
   public string cURL{get;set;}
}
T3
扩展了
T1
T2
属性在
T3
中定义。因此,我打算使用
AutoMapper
在一个视图模型中组合两个表。我使用以下方法从
T1
获取所有详细信息,并从
T2
获取相关详细信息,填写后将返回
IEnumerable T3

public IEnumerable<T3> GetAll()
{
   var od = mycontext.t1repository.GetMany().ToList();
   var ck = myContext.t2repository.GetMany(x => od.All(y => y.cID == x.cID)).ToList();
   if (od.Any())
   {
        Mapper.CreateMap<tblT1, T3>();
        Mapper.CreateMap<tblT2, T3>()
                    .ForMember(x=>x.cID, a => a.MapFrom(s => s.cID))
        var response = Mapper.Map<List<T1>, List<T3>>(od);
        return response;
   }
   return null;
}
public IEnumerable GetAll()
{
var od=mycontext.t1repository.GetMany().ToList();
var ck=myContext.t2repository.GetMany(x=>od.All(y=>y.cID==x.cID)).ToList();
if(od.Any())
{
CreateMap();
Mapper.CreateMap()
.ForMember(x=>x.cID,a=>a.MapFrom(s=>s.cID))
var响应=映射器映射(od);
返回响应;
}
返回null;
}

我通过尝试了上述代码,但这是针对单个实例的,我必须返回记录的
IEnumerable
。我不确定如何根据2个表的
cID
映射数据。你知道我怎样才能做到这一点吗?

我想你可以试试这样的方法:

var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<T1, T3>();
    cfg.CreateMap<T2, T3>();
});

var mapper = config.CreateMapper();

var od = new List<T1> { ... };
var ck = new List<T2> { ... };

var result = od.Join(ck, t => t.cID, t => t.cID, (t1, t2) =>
{
    var t3 = mapper.Map<T1, T3>(t1);
    t3 = mapper.Map<T2, T3>(t2, t3);

    return t3;
});
var config=new-MapperConfiguration(cfg=>
{
CreateMap();
CreateMap();
});
var mapper=config.CreateMapper();
var od=新列表{…};
var ck=新列表{…};
var result=od.Join(ck,t=>t.cID,t=>t.cID,(t1,t2)=>
{
var t3=映射器映射(t1);
t3=映射器映射(t2,t3);
返回t3;
});

首先您不需要这里的
cID
,因为它将从基类
T1
继承:

public class T3:T1
{
   public int cID{get;set;}  //need to remove
   public string cName{get;set;}
   public string cURL{get;set;}
}
然后创建从T1到T3的映射:

   Mapper.CreateMap<T1, T3>()
    .ForMember(dest => dest.cName, opt => opt.Ignore())
    .ForMember(dest => dest.cURL, opt => opt.Ignore());
Mapper.CreateMap()
.FormMember(dest=>dest.cName,opt=>opt.Ignore())
.ForMember(dest=>dest.cURL,opt=>opt.Ignore());
之后,创建T2到T3的地图:

  Mapper.CreateMap<T2>, T3>()
   .ForMember(dest => dest.oID, opt => opt.Ignore())
   .ForMember(dest => dest.date, opt => opt.Ignore())
   .ForMember(dest => dest.status, opt => opt.Ignore());
Mapper.CreateMap,T3>()
.ForMember(dest=>dest.oID,opt=>opt.Ignore())
.FormMember(dest=>dest.date,opt=>opt.Ignore())
.ForMember(dest=>dest.status,opt=>opt.Ignore());

您需要在T3中使用来自父级(T1)的字段吗?@威震天是的,我需要。。我需要显示
T1
中的数据以及
T2
中的相关数据,并将它们合并到
T3
中,谢谢你的时间伙伴。。我想同意上面的答案:)他态度很好+1.. :)这正是我想要的……)谢谢……)我必须补充一点,因为我使用的是Automapper v4.0.4,所以我不得不做
Mapper.Initialize
,而不是
var config=new-MapperConfiguration
@GuruprasadRao:ohh抱歉,这是真的。我这样做是因为我使用的是v4.2.1,请不要抱歉。。我没有提到版本,所以可能是我的错误:)快乐编码。。