Poste édité
Serait-ce possible ?
Avoir une expression de requête précompilée
i.e
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);
J'avais initialement déclaré ceci dans le même référentiel et j'y accédais directement, je n'ai eu aucun problème pour le consommer.
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();
}
Plus tard, j'ai refactorisé la variable statique dans une classe différente, car la même requête était utilisée par plusieurs référentiels,
La déclaration après le remaniement était la suivante (_filteredXyzs) réside dans la même classe que la méthode, ce qui la rend disponible pour la consommation.
Public static IQueryable<Xyz> GetValidXyzs(Context context, int xyzTypeId)
{
return from _filteredXyzs(context, id);
}
Je l'utilisais après le remaniement en tant que [RepositoryName].GetValidXyzs dans un contexte de requête particulier, mais je me retrouve avec le résultat suivant "System.StackOverflowException' s'est produite dans System.Data.Linq.dll".
L'entité Xyz est basée sur le sommet, sa disponibilité étant déterminée par les drapeaux des autres types dans les tables de base.
Xyz étant consommé dans de nombreux endroits, j'ai précompilé la requête pour une meilleure performance, je voulais juste centraliser cet aspect pour faciliter la maintenance.
Lorsque je passe par le débogueur, les méthodes statiques sortent sans erreur, mais échouent à l'étape suivante, c'est-à-dire à l'assemblage et à l'évaluation. Je suis donc un peu perplexe quant à la manière de résoudre ce problème ?
Je suis désolé pour les fautes de frappe et les déductions incorrectes, car mes connaissances en matière de C# et de Linq sont limitées,
Ps : en passant, Linq2Action recommande un champ statique avec une méthode non statique.
Toute aide serait appréciée