c# – LINQ-SQL – 在CompiledQuery.Compile中使用静态只读字段
发布时间:2020-12-15 17:21:23 所属栏目:百科 来源:网络整理
导读:我使用CompiledQuery.Compile遇到了一个奇怪的问题.当尝试在查询中使用静态只读字段时,我收到以下错误消息: Class member X is unmapped 如果我将字段decleration从partial类移到另一个与LINQ-SQL无关的类中,那么我得到以下内容: Object reference not set
我使用CompiledQuery.Compile遇到了一个奇怪的问题.当尝试在查询中使用静态只读字段时,我收到以下错误消息:
Class member X is unmapped 如果我将字段decleration从partial类移到另一个与LINQ-SQL无关的类中,那么我得到以下内容: Object reference not set to an instance of an object 如果我将字段作为参数传递,那么我看到没有错误,查询工作正常并生成预期的SQL. 一个例子如下: partial class Order { public static readonly string Complete = "Complete"; public static readonly string Pending = "Pending"; public static readonly Func<DataContext,Order,bool> IsComplete = CompiledQuery.Compile((DataContext context,Order o) => Complete == o.Status); } 用法: var test = from o in db.Orders select new { IsComplete = Order.IsComplete(db,o) }; 这会产生上述错误.如果我将一个字符串[]作为另一个参数添加到CompiledQuery,那么我看到没有错误.此外,如果我将字符串修改为const而不是静态只读,这也可以,但我想这是由于在编译时分配的值. 有没有办法让静态只读字段工作? 解决方法
问题出现了,因为Linq-To-Sql正试图将你的表达式转换为后端SQL,因为逻辑看到一个未映射的类成员,它无法应对转换它.
我建议你创建一个包装属性来为你完成工作 partial class Order { public static readonly string Complete = "Complete"; public static readonly string Pending = "Pending"; private static readonly Func<DataContext,bool> _isComplete; public static Func<DataContext,bool> IsComplete { get { if (_isComplete == null) { var complete=Complete; _isComplete CompiledQuery.Compile((DataContext context,Order o) => complete == o.Status); } return _isComplete; } } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |