如果「類」限制未應用於參數,則已知泛型不支持相等性比較。我們如何解決LINQ To Entities的問題?實體框架比較通用
query.Where(p => p.CategoryId == categoryId); //doesn't work
我看到的解決辦法之前是使用EqualityComparer.Default.Equal,但它不能被轉換爲SQL。
我也試圖手動構建表達:
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);
我的T可以是長或爲空。如果T是可爲空的,則此代碼將引發異常,因爲它可以檢查長和Nullable的相等性。
是否有適用於EF的任何變通辦法。