就想把查詢結果扔到AotoMapper里做轉換,研究了半天,用Tuple可以實現(xiàn)
var messages = from p in _db.ServiceMessages
group p by p.ServiceID into g
select new
{
ServiceID = g.Key,
LastMessageDate = g.Max(service => service.Created)
};
var results = (from p in _db.Services
join q in messages on p.ID equals q.ServiceID into serviceMessages
from s in serviceMessages.DefaultIfEmpty()
select new Tuple<Service, DateTime?>(p, s.LastMessageDate))
.ProjectTo<ServiceListDTO>(_mapper.ConfigurationProvider);
CreateMap<Tuple<Service, DateTime?>, ServiceListDTO>()
.ForAllMembers(opt =>
{
if (!opt.DestinationMember.Name.Equals("LastMessageDate"))
{
opt.MapFrom($"Item1.{opt.DestinationMember.Name}");
}
else
{
opt.MapFrom($"Item2");
}
});
會造成的問題:results不再是一個可擴展在Querable對象,慎用。