我在使用 Automapper 的 C# MVC 项目中有以下代码,但我需要它返回要由 Jquery Datatables 处理的数组数组。
我目前已经使用如下详述的 Linq 解决方案完成了它,但想知道是否有使用 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 模型到我的 IndexViewModel 的 AutoMapper 映射来只给我需要的字段,然后从中创建一个数组数组。
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);