Сообщение отредактировано
Возможно ли это?
иметь предварительно скомпилированное выражение запроса
т.е.
private static Func<SmwrDataContext, int, IQueryable<Xyz>> _validXyzs =
CompiledQuery.Compile((Context context, int Id) =>
from xyz in _db.XYZs
join abc in _db.ABCs on xyz.Id equals abc.Id
where xyz.TypeId = id && xyz.Flag && abc.Flag
select xyz);
Первоначально я объявил, что в том же хранилище имеет прямой доступ к нему, и у меня не было проблем с его потреблением.
public List<MyItem> GetItemsForValueRange(int xyzTypeId, double floor, double ceiling)
{
return (from xyx from _validXyzs (_db, xyzTypeId)
join num from _db.numbers xyz.ID equals num.lettersId
where
num.Value >= floor && num.Value <= ceiling
num.Flag
select new {
Name = xyz.Name,
Value = num.Value
}).ToList();
}
Позже реорганизовал статическую переменную в другой класс, поскольку один и тот же запрос использовался несколькими хранилищами,
Объявление после рефакторинга было следующим (_filteredXyzs) находится в том же классе, что и метод, делающий его доступным для использования.
Public static IQueryable<Xyz> GetValidXyzs(Context context, int xyzTypeId)
{
return from _filteredXyzs(context, id);
}
Использовал его после рефакторинга как [RepositoryName] .GetValidXyzs в любом конкретном контексте запроса, но в итоге получил следующее
«System.StackOverflowException» произошло в System.Data.Linq.dll "
Сущность Xyz основана на вершине, ее доступность определяется флагами других типов в основных таблицах.
Поскольку Xyz используется во многих местах, я предварительно скомпилировал запрос для повышения производительности, просто хотел централизовать этот аспект, чтобы сделать его более удобным для обслуживания.
Когда я прохожу через отладчик, статические методы завершаются без каких-либо ошибок, но терпят неудачу во время следующего шага, то есть объединения и оценки. так что я немного озадачен тем, как решить эту проблему?
Прошу прощения за опечатки и любые другие неверные выводы, так как мои знания w.r.t c # и Linq ограничены,
Ps: для sidenote Linq2Action рекомендует статическое поле нестатическим методом
Любая помощь будет оценена