Lambda 表达式:如何映射到列表而不是 IEnumerable?

Syl20

我使用以下代码来避免重复:

 private static Expression<Func<Incident_Log, IncidentVM>> mappingIncidentVM()
        {
            return x => new IncidentVM
            {
                incident_ID = x.incident_id,                    
                incident_description = x.incident_description,
                file_names = x.file_names,
                location = x.location,

                Actions = 
                    x.Action_Log.Where(y => y.assigned_to == y.assigned_to).Select(z => new ActionVM
                {
                    incident_ID = z.incident_id,
                    action_ID = z.action_id,
                    action_description = z.action_description

                })                   
                //actionList = new List<ActionVM>(d => mappingActionVM)

            };
        }

然后我可以执行以下操作:

List<IncidentVM> incidents = db.Incident_Log.Select(mappingIncidentVM).ToList();

它将 Incident_Log 实体映射到我的 viewModel IncidentVM。我的问题是我希望我可以直接映射到列表而不是 IEnumerable.Something 这样的:

  private static Expression<Func<Incident_Log, IncidentVM>> mappingIncidentVM()
        {
            return x => new IncidentVM
            {
                incident_ID = x.incident_id,                   
                incident_description = x.incident_description,
                file_names = x.file_names,
                location = x.location,

                actionList =
                    x.Action_Log.Where(y => y.assigned_to == y.assigned_to).Select(z => new ActionVM
                    {
                        incident_ID = z.incident_id,
                        action_ID = z.action_id,
                        action_description = z.action_description

                    }).ToList()


            };
        }

但这会引发错误:

LINQ to Entities does not recognize the method System.Collections.Generic.List[ViewModel.ActionVM] ToList[ActionVM](System.Collections.Generic.IEnumerable([ViewModel.ActionVM]) method, and this method cannot be translated into a store expression.

无法识别 ToList()。

这是我的视图模型:

 public class IncidentVM
    {

        public int incident_ID { set; get; }               

        [Display(Name = "Description*")]
        [Required]
        public string incident_description { get; set; }

        [Display(Name = "Specific Location*")]
        [Required]
        public string location { set; get; }

        public string file_names { set; get; }

//Here is the problem, I 'd like to have only actionList
        public IEnumerable<ActionVM> Actions { get; set; }          
        public List<ActionVM> actionList { get; set; }

这是 Action_Log 对象的模型:

public partial class Action_Log
{
    public int action_id { get; set; }
    public int incident_id { get; set; }
    public string action_description { get; set; }

    public virtual Incident_Log Incident_Log { get; set; }       
}

在这种情况下是否可以直接映射到列表?

锡德

问题是 LINQ 无法翻译,ToList所以在处理本地数据时(在您执行查询之后)IEnumerable使用然后使用ToList,您应该没问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章