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

时间:2015-03-20 12:52:53

标签: c# sql linq linq-to-sql

知道我可能做错了什么。我试图通过链接2个表来返回Type 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();

1 个答案:

答案 0 :(得分:2)

当你刚学会硬道时,你无法直接创建该对象。当您调用select new 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 role)
                    .FirstOrDefault();

select new.Select()(带有lambda)用于进行投影,通常为不同的数据类型。由于您在已创建的AppRole对象上运行查询,因此不需要这样做,而是返回匹配的第一个。

至于为什么你不能这样做是因为当你执行linq-to-sql查询时(在linq-to-entities中也是这种情况),它会将代码转换为SQL,但是,对象创建无法转换为SQL,因此您将收到一条错误信息,就像您刚刚经历过的那样。