首页 > 解决方案 > 该类型出现在单个 LINQ to Entities 查询中的两个结构不兼容的初始化中

问题描述

我正在尝试从多个表中获取记录,最后两个表与之相关,所以我在它们之间进行连接,但第一个表与它们没有关系,但我需要从中获取数据。这是我的视图模型

 public class AssignTodoVM
{
    public int TOdoPresetTeamID { get; set; }
    public int UserId { get; set; }
    public int TaskId { get; set; }       
    public string TaskName { get; set; }
    public DateTime CreatedDate { get; set; }
    public string userName { get; set; }
    public int? TeamId { get; set; }
   
}

我写了以下查询并得到错误。

 var Tasks = (from c in _context.ToDoPresets
                     select new AssignTodoVM
                     {
                         TaskId = c.ToDoPresetID,
                         TaskName = c.Title,
                         TOdoPresetTeamID = c.ToDoPresetID,
                     }).Union(
                     from q in _context.AppTeamMembers
                     join s in _context.AppUsers
                     on q.AppUserID equals s.UserId
                     where q.IsManager == false
                     select new AssignTodoVM
                     {

                         CreatedDate = System.DateTime.Now,

                         UserId = s.UserId,
                         userName = s.UserName,
                         TeamId = q.AppTeamID
                     }).ToList();

错误屏幕

标签: c#linqentity-framework-6

解决方案


这两个片段

 new AssignTodoVM
 {
     TaskId = c.ToDoPresetID,
     TaskName = c.Title,
     TOdoPresetTeamID = c.ToDoPresetID,
 }

 new AssignTodoVM
 {

     CreatedDate = System.DateTime.Now,

     UserId = s.UserId,
     userName = s.UserName,
     TeamId = q.AppTeamID
 }

创建相同类型但具有不同初始化的对象。您需要使其中一个与另一个相似。这是一个尝试(这可能是不正确的,因为我不知道您的课程的具体情况);做第一个

 new AssignTodoVM
 {
     CreatedDate = System.DateTime.Now,
     UserId = -1,
     userName = "preset",
     TeamId = -1,
     TaskId = c.ToDoPresetID,
     TaskName = c.Title,
     TOdoPresetTeamID = c.ToDoPresetID,
 }

第二个

 new AssignTodoVM
 {

     CreatedDate = System.DateTime.Now,    
     UserId = s.UserId,
     userName = s.UserName,
     TeamId = q.AppTeamID,
     TaskId = -1, // this is very likely wrong!
     TaskName = "",
     TOdoPresetTeamID = -1,
 }

正如我所说,这可能不是正确的答案,但我没有足够的关于你的课程的信息来使它更好。


推荐阅读