【问题标题】:Error with custom model in ViewView 中的自定义模型出错
【发布时间】:2015-04-27 12:44:04
【问题描述】:

我已将我的自定义模型用于我的视图中,但当我尝试使用它时出现错误

无法在 LINQ to Entities 查询中构造实体或复杂类型“Prep2Model.TechProfile”。

我不知道如何解决。
这是我的相关类和控制器

自定义视图模型

namespace Prep2.Models
{
public class MyProjectViewModel
{
    public IEnumerable<Project> Project { get; set; }
    public IEnumerable<MyProjectCustomObject> Data { get; set; }
}
}

MyProjectCustomObject

namespace Prep2.Models
{
public class MyProjectCustomObject
{
    public int ProjectId { get; set; }
    public string ProjectCustomer { get; set; }
    public string ProjectName { get; set; }

    public IEnumerable<TechProfile> ProjectTechProfile { get; set; }

    public int MemberId { get; set; }
    public string MemberRole { get; set; }
    public short? MemberStart { get; set; }
    public short? MemberEnd { get; set; }
}
}

控制器

        var Projects = from a in db.Project
                      select a;

        var Data = from a in db.Member
                   where a.Person.PersonId.Equals(Id)
                   select new MyProjectCustomObject
                   {
                       ProjectId = a.Project.ProjectId,
                       ProjectCustomer = a.Project.Customer,
                       ProjectName = a.Project.Name,

                       ProjectTechProfile = a.Project.TechProfile.Select(x => new TechProfile()
                       {
                           TechProfileId = x.TechProfileId,
                           Name = x.Name,
                           Elements = x.Elements
                       }),

                       MemberId = a.MemberId,
                       MemberRole = a.Role,
                       MemberStart = a.Start,
                       MemberEnd = a.End
                   };

        var MyViewModel = new MyProjectViewModel();
        MyViewModel.Project = Projects;
        MyViewModel.Data = Data;

        //return ViewModel to View.
        return View(MyViewModel);

【问题讨论】:

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 model-view-controller


【解决方案1】:

它的意思是它不能在select 内创建新的TechProfile 记录:

x => new TechProfile()
{
    TechProfileId = x.TechProfileId,
    Name = x.Name,
    Elements = x.Elements
}

我相信您正在寻找这个:

ProjectTechProfile = a.Project.TechProfile.First(x =>
{
    TechProfileId = x.TechProfileId,
    Name = x.Name,
    Elements = x.Elements
})

更新 你有两个选择,我可以看到。首先,您可以创建一个模仿TechProfile 类的不同类并执行以下操作:

ProjectTechProfile = a.Project.TechProfile.Select(x => new MyTechProfile
{
    TechProfileId = x.TechProfileId,
    Name = x.Name,
    Elements = x.Elements
})

或者您可以先将结果发送到本地集合,从而发出SQL语句,然后将它们投影到MyProjectCustomObject:

var Data = from a in db.Member
           where a.Person.PersonId.Equals(Id)
           select a;
var list = Data.ToList();
var projectedList = list.Select(a => new MyProjectCustomObject
{
    ProjectId = a.Project.ProjectId,
    ProjectCustomer = a.Project.Customer,
    ProjectName = a.Project.Name,
    ProjectTechProfile = a.Project.TechProfile.Select(x => new TechProfile()
    {
        TechProfileId = x.TechProfileId,
        Name = x.Name,
        Elements = x.Elements
    }),
    MemberId = a.MemberId,
    MemberRole = a.Role,
    MemberStart = a.Start,
    MemberEnd = a.End
});

【讨论】:

  • 但是可以有很多 TechProfile,这就是为什么我需要它作为 IEnumerable
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-12
  • 2021-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多