使用LINQ to Entities查询数据库时遇System.Guid转System.Object异常求助
问题解决:LINQ to Entities Guid转Object转换异常
问题原因
你的LINQ查询中,多条件Join使用了{t.AppFolderId, isLoggedInUser.ID_Role} Equals {r.AppFolderID, r.RoleID}这种匿名集合的写法,LINQ to Entities无法正确解析这种集合相等的逻辑,导致Guid类型被尝试转换为Object类型,触发异常。
修复方案
将多条件Join拆分为两个独立的相等条件,用And连接,替换原来的集合相等写法:
修改后的查询代码:
Dim GBItems As List(Of HomeTree) = (From t In db.ApplicationFolders Join r In db.AppFolderRoleConfig On t.AppFolderId Equals r.AppFolderID And isLoggedInUser.ID_Role Equals r.RoleID Where t.ParentID = 0 AndAlso t.TypeID = 1 Select New HomeTree With { .ID_Key = t.ID_Key, .AppFolderId = t.AppFolderId, .Name = t.Name, .Active = t.Active, .Description = t.Description, .ParentID = t.ParentID, .TypeID = t.TypeID, .CanAdd = r.CanAdd, .CanDelete = r.CanDelete, .CanEdit = r.CanEdit, .CanList = r.CanList }).ToList()
说明
LINQ to Entities对多条件Join的支持要求在On子句中明确列出每个相等条件并通过逻辑运算符连接,而非通过创建匿名集合实现多字段匹配。这种写法能让EF正确识别每个字段的类型,避免不必要的类型转换操作。
内容的提问来源于stack exchange,提问作者Mckenzie
相关产品推荐
相关产品推荐

