Il est connu que les génériques ne supportent pas la comparaison d'égalité si la restriction "class" n'est pas appliquée à un paramètre. Comment pouvons-nous contourner ce problème pour LINQ To Entities?Entity Framework compare générique
query.Where(p => p.CategoryId == categoryId); //doesn't work
La solution que j'ai vu avant était d'utiliser EqualityComparer.Default.Equal, mais il ne peut pas être traduit en SQL.
J'ai aussi essayé de construire l'expression manuelle:
var parameterExpression = Expression.Parameter(typeof(T));
var categoryIdPropertyExpression = Expression.Property(parameterExpression, "CategoryId");
var categoryIdExpression = Expression.Constant(categoryId);
var equalityExpression = Expression.Equal(categoryIdPropertyExpression, categoryIdExpression);
Expression<Func<T, bool>> lambda = Expression.Lambda<Func<T, bool>>(equalityExpression, parameterExpression);
query = query.Where(lambda);
Mon T peut être longue ou Nullable. Et ce code jette une exception si T est Nullable car il peut vérifier l'égalité de long et Nullable.
Y a-t-il des solutions de contournement qui fonctionnent pour EF?