我使用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; } } }
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。