不允许在查询中构造实体类型
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,因此您将收到一条错误消息,就像您刚刚遇到的那样。
知道我可能做错了什么。我正在尝试通过链接 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,因此您将收到一条错误消息,就像您刚刚遇到的那样。