gpt4 book ai didi

c# - LINQ-SQL - 在 CompiledQuery.Compile 中使用静态只读字段?

转载 作者:行者123 更新时间:2023-11-30 12:34:00 26 4
gpt4 key购买 nike

我在使用 CompiledQuery.Compile 时遇到了一个奇怪的问题。尝试在查询中使用静态只读字段时,我收到以下错误消息:

Class member X is unmapped

如果我将字段 decleration 从部分类中移到另一个与 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)
};

这会产生提到的错误。如果我将 string[] 作为 CompiledQuery 的另一个参数添加,那么我看不到任何错误。此外,如果我将字符串修改为 const 而不是 static readonly 这也有效,但我想这是由于在编译时分配的值。

有什么方法可以使 static readonly 字段正常工作吗?

最佳答案

出现问题是因为 Linq-To-Sql 试图将您的表达式转换为后端 SQL,因为逻辑看到一个未映射的类成员,它无法处理转换它。

我建议您创建一个包装属性来为您完成这项工作

partial class Order  { 

public static readonly string Complete = "Complete";
public static readonly string Pending = "Pending";

private static readonly Func<DataContext, Order, bool> _isComplete;

public static Func<DataContext, Order, bool> IsComplete {
get {
if (_isComplete == null) {
var complete=Complete;
_isComplete CompiledQuery.Compile((DataContext context, Order o) =>
complete == o.Status);
}
return _isComplete;
}
}
}

关于c# - LINQ-SQL - 在 CompiledQuery.Compile 中使用静态只读字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7964645/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com