【发布时间】:2017-04-19 09:52:15
【问题描述】:
我使用以下 LINQ 查询从我的数据库中获取用户 ID 和文档路径。
var usr = DB.tbl_user .Where(x => x.Account.Contains(user)) .ToList() .FirstOrDefault(); var _obj = (from tbl_pld_doc in DB.tbl_pld_doc where tbl_pld_doc.path != null where tbl_pld_doc.Item.Contains(doc) where tbl_pld_doc.tbl_roles.Any(x => x.Id == usr.tbl_roles.FirstOrDefault().Id) select tbl_pld_doc).ToList();
不幸的是,我收到了错误消息:
“System.NotSupportedException”类型的异常发生在 EntityFramework.SqlServer.dll 但未在用户代码中处理
附加信息:无法创建类型的常量值 'WebApplicationTestDb.Models.tbl_roles'。只有原始类型或 在此上下文中支持枚举类型。
但是当我使用变量usr_role_id 临时存储usr.tbl_roles.FirstOrDefault().Id 时,一切正常。
var usr = DB.tbl_user .Where(x => x.Account.Contains(user)) .ToList() .FirstOrDefault(); var usr_role_id = usr.tbl_roles.FirstOrDefault().Id; var _obj = (from tbl_pld_doc in DB.tbl_pld_doc where tbl_pld_doc.path != null where tbl_pld_doc.Item.Contains(doc) where tbl_pld_doc.tbl_roles.Any(x => x.Id == usr_role_id ) select tbl_pld_doc).ToList();
我的问题是:为什么这两种情况有不同的行为?
【问题讨论】:
-
您是否尝试过搜索?您需要将
usr.tbl_roles.FirstOrDefault().Id提取到一个单独的变量中,并将 that 传递给第二个查询,就像在第二个示例中所做的那样。你有什么问题? -
除此之外,调用
FirstOrDefault().SomeProperty基本上是在说“我可以接受 NullReferenceException”。 -
@CodeCaster 这就是他在第二种方法中所做的 - 你完整地阅读了这个问题吗?
-
@Toshi 是的,那么问题是什么?
-
@CodeCaster,我似乎很清楚 OP 问道:“为什么使用存储
usr.tbl_roles.FirstOrDefault().Id的临时变量查询成功,而没有它查询会失败?”。
标签: c# entity-framework linq