J'ai une paire de Linq à des requêtes SQL qui contiennent la même clause WHERE complexe, plus précisément:Options pour le partage de code dans Linq2SQL expressions
where ((range.MinimumFrequency <= minFreq && minFreq <= range.MaximumFrequency)
|| (range.MinimumFrequency <= maxFreq && maxFreq <= range.MaximumFrequency)
|| (range.MinimumFrequency <= minFreq && maxFreq <= range.MaximumFrequency)
|| (range.MinimumFrequency >= minFreq && maxFreq >= range.MaximumFrequency))
Et plutôt que de copier et coller ce morceau de code dans tous les sens , Je voulais refactoriser dans quelque chose d'autre qui peut être partagé. Je sais que je ne peux pas le faire avec une méthode normale car il ne peut pas être traduit en SQL, mais je ne peux pas non plus obtenir les
Expression < Func<...>>
choses described here travailler non plus.
Si je simplifie la clause where dans le but de ma santé mentale ici, je veux tourner
where (range.MinumumFrequency < minFreq)
dans une expression, alors j'ai essayé:
public static Expression<Func<FreqRange, bool>> Overlaps(decimal minMHz, decimal maxMHz)
{
return (range => range.MinimumFrequency <= minMHz);
}
Cela semble compiler, mais Je ne peux pas sembler obtenir l'instruction where au travail, j'ai essayé ce qui suit:
where FreqRange.Overlaps(minMHz, maxMHz)
mais cela me donne une erreur de compilation:
Cannot implicitly convert type 'System.Linq.Expressions.Expression>' to 'bool'
Toutes les idées? Aussi, en supposant que nous obtenons ce fonctionnement, puis-je simplement étendre l'expression lambda dans l'expression < Func < >> pour inclure les autres conditions?