使用Automapper创建数组数组

时间:2013-09-20 09:21:59

标签: c# arrays linq automapper

我在使用Automapper的C#MVC项目中有以下代码,但我需要它来返回由Jquery Datatables处理的数组数组。

我目前使用Linq解决方案完成它,如下所述,但想知道是否有使用Automapper的解决方案?

Automapper

Mapper.CreateMap<Job, IndexJobViewModel>()
    .ForMember(jvm => jvm.JobNumberFull,
    expression => expression.ResolveUsing(j => string.Format("{0}-{1}-{2}", j.JobNumberPrefix, j.JobNumber, j.JobNumberYear)));

LINQ

 var jobs = db.Jobs.AsEnumerable()
     .Select(j => new[] 
     { 
         j.JobNumber.ToString(),
         j.JobNumberYear.ToString(),
         String.Format("{0}-{1}-{2}", j.JobNumberPrefix, j.JobNumber, j.JobNumberYear),
         j.JobPriority.ToString(),
         j.EntityPriority.PriorityLevel,
         j.JobDescription
     });

return Json(new
{
   Data = jobs.ToArray()
}, JsonRequestBehavior.AllowGet);

更新

感谢ThinTim指出我正确的方向,我提出了一个有效的解决方案,虽然它并没有真正减少我的Linq版本的代码,只是另一种方式!我本来希望能够使用我的Job模型中的AutoMapper映射到我的IndexViewModel,只给我需要的字段,然后从中创建一个数组数组。

Mapper.CreateMap<Job, string[]>().ConstructUsing(
    j => new string[] 
    { 
         j.JobID.ToString(),
         j.JobNumber.ToString(), 
         j.JobNumberYear.ToString(), 
         string.Format("{0}-{1}-{2}", j.JobNumberPrefix, j.JobNumber, j.JobNumberYear), 
         j.JobPriority.ToString(), 
         j.EntityPriority.PriorityLevel,
         j.JobDescription 
     });

var jobs = db.Jobs.Where(j => j.OperationID == operationId).ToList();
var jobsArray = jobs.Select(job => Mapper.Map<string[]>(job)).ToArray();                          

return Json(new
{
Data = jobsArray
}, JsonRequestBehavior.AllowGet);

1 个答案:

答案 0 :(得分:1)

This post似乎有你想要的东西。