实体或复杂类型''无法在LINQ to Entities查询中构造

28

可能是重复问题:
The entity cannot be constructed in a LINQ to Entities query

   var tasks = from i in data.Incidents
                    join a in data.Accounts on i.CustomerID equals a.Acct_CID
                    select new Tasks()
                    {

                        creator_id = a.ID,
                        start_date = i.DateOpened,
                        end_date = i.DateCLosed,
                        product_code = i.ProductCode,
                        install_type = i.InstallType,
                        os = i.OSType,
                        details = i.Description,
                        solution = i.Solution,
                        creator_name = i.TechID,
                        category = i.Title,
                        text = "Ticket for" + " " + i.Name,
                        status_id = 7
                    };

        foreach (var task in tasks)
            data.Tasks.Add(task);
        data.SaveChanges();

 public class Incidents
    {
        [Key]
        public int IncidentID { get; set; }
        public string CustomerID { get; set; }
        public string ProductCode { get; set; }
        public string TechID { get; set; }
        public DateTime DateOpened { get; set; }
        public DateTime DateCLosed { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }
        public string Solution { get; set; }
        public string Name { get; set; }
        public string OSType{ get; set; }
        public string InstallType { get; set; }
        public string AddOnSoftware { get; set; }
        public string ScreenShare { get; set; }
    }

在我尝试迭代时,会给我一个错误提示,我希望能得到一些帮助。


6
这并不是重复问题,因为那些问题没有回答我的问题。 - Chazt3n
从看起来的情况来看,您正在尝试投影到一个实体而不是常规/匿名类型——所以在我看来它们是相同的。请记住它说可能是重复项。 - James
请查看此答案:https://dev59.com/hG435IYBdhLWcg3wlRMf#39880539 - Basheer AL-MOMANI
1个回答

84

Linq-to-Entities只能将查询结果投影到匿名类型或普通类。不能将结果投影到现有的实体类型上。在Linq-to-Objects中可以这样做:

var tasks = (from i in data.Incidents
            join a in data.Accounts on i.CustomerID equals a.Acct_CID
             select new
             {
               creator_id = a.ID,
               start_date = i.DateOpened,
               end_date = i.DateCLosed
              // ...
             }).AsEnumerable().Select(x => new Tasks {
               creator_id = x.creator_id,
               start_date = x.start_date,
               end_date = x.end_date              
             }).ToList();

错误9:无法使用集合初始化程序初始化类型“TRX.CRM.Dashboard.Entities.DashBoard.Tasks”,因为它没有实现“System.Collections.IEnumerable”。 - Chazt3n
@Chazt3n - 我在末尾添加了一个 ToList。试试看吧。 - Aducci
ToList 无法解决这个问题。如果不是匿名类型,就不能使用隐含的字段名称。 - jwg
1
@jwg - 你说得对。我更新了答案。谢谢。 - Aducci
2
非常感谢您,Aducci;我已经寻找了几天,试图摆脱一些其他错误,现在终于全部解决了。 - Artorias2718
你救了我的一天 :) - superachu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接