Я столкнулся со странной проблемой при использовании CompiledQuery.Compile
. При попытке использовать статическое поле только для чтения в запросе я получаю следующее сообщение об ошибке:
Class member X is unmapped
Если я перенесу объявление поля из частичного класса в другой класс, не связанный с 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
?