Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 添加联接时实体框架核心错误_C#_Entity Framework_.net Core - Fatal编程技术网

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类型,这是正确的,返回它,一切正常。 在第二种情况下,返回匿名类型,这里有两个选项:

  • 为该类型创建一个模型(具有Id、Title和LoeName属性),并返回“IQueryable
  • 从表达式((rt,rp)=>rt)返回“Routing_Tool”,该表达式没有意义

  • 我必须通过添加集合、新的公共方法和新的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; }
        }