添加联接时出现实体框架核心错误



这是怎么回事:

var query = _context.Routing_Tool
.Where(rt => rt.Id == id)
.FirstOrDefault();
return query;

但这不是

var query = _context.Routing_Tool                       
.Join(_context.Routing_Tool_Prioritization_Matrix,
rt => rt.Id,
rp => rp.RoutingToolId,
(rt, rp) => new 
{ 
Id = rt.Id,
Title = rt.Title,
LoeName = rp.LoeName,
}
)
.Where(rt => rt.Id == id)
.FirstOrDefault();
return query;

相反,在尝试联接表之后,我会得到并隐式转换类型错误。感谢的帮助

全新的方法——包括我正在研究的旧方法,以供参考。

public Routing_Tool GetItemsInitById(int id)
{

//var query = (from rt in _context.Set<Routing_Tool>()
//              join rp in _context.Set<Routing_Tool_Prioritization_Matrix>()
//                  on rt.Id equals rp.RoutingToolId into grouping
//             from rp in grouping.DefaultIfEmpty()
//             select new Routing_Tool { 
//                 Id = rt.Id,
//                 Title = rt.Title,
//                 Classification = rt.Classification,
//                 MainPOC = rt.MainPOC,
//                 RequestingDirectorate = rt.RequestingDirectorate,
//                 IsEnduring = rt.IsEnduring,
//                 IsApproved = rt.IsApproved,
//                 IsAssociated = rt.IsAssociated,
//                 DirectingRequirement = rt.DirectingRequirement,
//                 RequirementDescription = rt.RequirementDescription,
//                 RequestType = rt.RequestType,
//                // LoeName = rp.LoeName,
//                // LoePriority = rp.LoePriority,
//             }
//             ).FirstOrDefault();
// return query;
var query = _context.Routing_Tool
.Join(_context.Routing_Tool_Prioritization_Matrix,
rt => rt.Id,
rp => rp.RoutingToolId,
(rt, rp) => new
{ 
Id = rt.Id,
Title = rt.Title,

}
)
.Where(rt => rt.Id == id)
.FirstOrDefault();
return query;

//return _context.Routing_Tool.FirstOrDefault(p => p.Id == id);
}

在第一种情况下,查询变量为IQueryable<Routing_Tool>类型,这是正确的,您返回它,一切都很好。在第二种情况下,您返回匿名类型,这里有两个选项:

  1. 为该类型创建一个模型(具有Id、Title和LoeName属性(并返回";IQueryable<我的类型>quot;相反
  2. 返回";Routing_Tool"根据表达式((rt,rp(=>rt(,这毫无意义

我不得不通过添加集合、新的公共方法和新的选择查询来修改这两个表的模型:

public Routing_Tool GetItemsInitById(int id)
{
var initPage = _context.Routing_Tool
.Include(pub => pub.Routing_Tool_Prioritization_Matrices)
.Where(rt => rt.Id == id)
.FirstOrDefault();
return initPage;
}

路由工具模型:

public class Routing_Tool
{
public Routing_Tool()
{
Routing_Tool_Prioritization_Matrices = new HashSet<Routing_Tool_Prioritization_Matrix>();
}
[Key]
[Required]
public int Id { get; set; }
[MaxLength(255)]
[Required]
public string Title { get; set; }
[MaxLength(255)]
[Required]
public string Classification { get; set; }
[MaxLength(255)]
[Required]
public string MainPOC { get; set; }
[MaxLength(10)]
[Required]
public string RequestingDirectorate { get; set; }
[MaxLength(1)]
[Required]
public int IsEnduring { get; set; }
[MaxLength(1)]
[Required]
public int IsApproved { get; set; }
[MaxLength(1)]
[Required]
public int IsAssociated { get; set; }
[Required]
public string DirectingRequirement { get; set; }
[Required]
public string RequirementDescription { get; set; }

[Required]
public string RequestType { get; set; }
public virtual ICollection<Routing_Tool_Prioritization_Matrix> Routing_Tool_Prioritization_Matrices { get; set; }
}

带有FK:的尺寸表

public class Routing_Tool_Prioritization_Matrix
{
[Key]
[Required]
public int Id { get; set; }
public string LoeName { get; set; }
public string LoePriority { get; set; }
public int RoutingToolId { get; set; }
[ForeignKey("RoutingToolId")]
public virtual Routing_Tool Routing_Tool { get; set; }
}

最新更新