不允许在查询中构造实体类型

construction of entity type in query is not allowed

知道我可能做错了什么。我正在尝试通过链接 2 个表来 return 类型 AppRole 的对象。但是我收到错误消息,不允许在查询中显式构造实体类型 'AppRole'。如何获取满足条件的AppRole类型的对象

AppRole RoleName = (from role in dbContext.AppRoles
                                            join user in dbContext.AppUsers on role.RoleID equals user.RoleID
                                            where user.UserName.Contains(userNameDL)
                                            select new AppRole
                                            {
                                                RoleID = role.RoleID,
                                                RoleName = role.RoleName,
                                                Description = role.Description,
                                                Status = role.Status,
                                                UpdateDate = role.UpdateDate
                                            }).FirstOrDefault();

你不能直接创建那个 object 因为你刚刚学到了困难。当您调用 select new AppRole{} 时,您正在明确创建一个新的,这是不必要的,因为您的查询中已经有一堆 AppRole object。您只想从 collection.

中取出一个

相反,您可以这样做:

AppRole RoleName = (from role in dbContext.AppRoles
                    join user in dbContext.AppUsers on role.RoleID equals user.RoleID
                    where user.UserName.Contains(userNameDL)
                    select role)
                    .FirstOrDefault();

select new.Select()(带有 lambda)用于进行投影,通常是不同的数据类型。由于您是 运行 对已创建的 AppRole object 的查询,因此不需要这样做,我们可以 return 第一个匹配的

至于 WHY 你不能这样做是因为当你执行 linq-to-sql 查询时(linq-to-entities 中也是如此)它会翻译将代码转换为 SQL,但是 object 的创建无法转换为 SQL,因此您将收到一条错误消息,就像您刚刚遇到的那样。