首页 > 解决方案 > 添加联接时出现实体框架核心错误

问题描述

这是怎么回事:

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);
        }

标签: c#entity-framework.net-core

解决方案


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

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

推荐阅读