实体框架 - 无法创建类型x的常量值.在此上下文中仅支持基元类型.

use*_*881 6 asp.net-mvc entity-framework

我有以下内容

工程师模型:

public class engineers
{
    public Guid? Guid { get; set; }
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我在工程师名单中填写正确的详细信息:

List<engineers> listeng = new List<engineers>();
listeng.Add(new engineers { Name = profile.FirstName + " " + profile.LastName, Guid = GuidEngineer });
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.

我的问题如何将工程师名称拉到下面的eng条目:

 var tickets = from o in new HelpdeskEntities().Tickets.Where(t => t.TicketState.State == "Open")
                    select new AjaxTickets
                    {
                        TicketID = o.TicketID,
                        TicketSubject = o.TicketSubject,
                        ClientCompanyName = o.ClientCompany.ClientCompanyName,
                        DateOpened = o.DateOpened,
                        **eng** = list.Where(x => x.Guid == o.EngineerID).Select(x => new engineers {Guid = x.Guid, Name=x.Name }).FirstOrDefault().Name

                    }; 
Run Code Online (Sandbox Code Playgroud)

我也试过了

var tickets = from o in new HelpdeskEntities().Tickets.Where(t => t.TicketState.State == "Open")
                    select new AjaxTickets
                    {
                        TicketID = o.TicketID,
                        TicketSubject = o.TicketSubject,
                        ClientCompanyName = o.ClientCompany.ClientCompanyName,
                        DateOpened = o.DateOpened,
                        **eng** = list.Where(x => x.Guid == o.EngineerID).Select(x => x.Name }).FirstOrDefault()
                    }; 
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

Unable to create a constant value of type 'Helpdesk2.ViewModel.engineers'. Only primitive types ('such as Int32, String, and Guid') are supported in this context."}
Run Code Online (Sandbox Code Playgroud)

我有点理解,但不能弄清楚只是为了选择工程师的名字.

提前致谢

har*_*ott 3

您应该能够将第一个简化为:

list.FirstOrDefault(x => x.Guid == o.EngineerID).Name
Run Code Online (Sandbox Code Playgroud)

话虽如此,实体框架可能不会让您在运行数据库调用时运行它。如果您可以从工单到工程师创建外键,那么您可以按照与客户公司名称相同的方式选择它。如果没有,那么您需要分两步进行:首先,运行选择而不填充工程师姓名属性,然后,用以下内容填充它们:

tickets.ForEach(ticket => ticket.EngineerName = engineers.First(eng => eng.Guid == ticket.EngineerID).Name)
Run Code Online (Sandbox Code Playgroud)

显然,您需要添加 EngineerID 属性并在第一步中选择它。