C# 添加联接时实体框架核心错误
这是怎么回事:C# 添加联接时实体框架核心错误,c#,entity-framework,.net-core,C#,Entity Framework,.net Core,这是怎么回事: var query = _context.Routing_Tool .Where(rt => rt.Id == id) .FirstOrDefault(); return query; 但事实并非如此 var query = _context.Routing_Tool .Join(_context.Routing_Tool_Prioritization_Matrix,
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);
}
public Routing_工具GetItemsInitById(int-id)
{
//var query=(来自_context.Set()中的rt)
//在_context.Set()中加入rp
//在rt.Id等于rp.RoutingToolId的情况下进行分组
//来自分组中的rp.DefaultIfEmpty()
//选择新布线工具{
//Id=rt.Id,
//标题=右标题,
//分类=rt.分类,
//MainPOC=rt.MainPOC,
//requestingdirectory=rt.requestingdirectory,
//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();
//返回查询;
var query=\u context.Routing\u工具
.Join(_context.Routing_Tool_Prioritization_Matrix,
rt=>rt.Id,
rp=>rp.RoutingToolId,
(rt,rp)=>新
{
Id=rt.Id,
标题=右标题,
}
)
.Where(rt=>rt.Id==Id)
.FirstOrDefault();
返回查询;
//返回_context.Routing_Tool.FirstOrDefault(p=>p.Id==Id);
}
在第一种情况下,查询变量是IQueryable类型,这是正确的,返回它,一切正常。
在第二种情况下,返回匿名类型,这里有两个选项:
我必须通过添加集合、新的公共方法和新的select查询来修改这两个表的模型:
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; }
}
错误是编译时还是运行时?它不允许返回值。返回查询;并给出一个强制转换错误消息。编译器错误CS0029。为什么不使用正在工作的变量?我的阅读能力更强,正因为如此,我确信它有更好的性能。我创建了模型,但仍然给了我问题。可能是因为2.0版的内核?我已经看了好几天的视频,无法找到解决方案。不,这与ef core无关。发布整个方法。发布更新。我注意到,当我添加IQueryable时,它打破了单一的Where()。公共路由工具GetItemsInitById(int-id)您没有在这里返回路由工具。公共对象GetItemsInitById(int id)将解决编译错误,但无法解决问题。我只想通过FK id将优先级矩阵表连接到主路由工具表并返回结果。
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; }
}