0

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)));

リンク

 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);
4

1 に答える 1

1

この投稿には、探しているものが含まれているようです。

于 2013-09-20T09:35:18.980 に答える