Ошибка в IEqualityComparer <T>
Мне было дано это решение в одном из моих вопросов... кажется очень интересным.. поскольку я пытаюсь и учась понимать LINQ. У меня возникает эта ошибка при ее реализации. Я не знаю, что здесь происходит неправильно... ищет экспертную консультацию.
public class CategotiesEqualityComparer : IEqualityComparer<ac_Categories>
{
public bool Equals(ac_Categories x, ac_Categories y)
{
return x.ThumbnailAltText.Trim() == y.ThumbnailAltText.Trim();
}
public int GetHashCode(ac_Categories obj)
{
return obj.ThumbnailAltText.Trim().GetHashCode();
}
}
var catlist = _db.ac_Categories
.Where(c => c.VisibilityId == 0 && c.ThumbnailAltText != null
&& (!c.ThumbnailAltText.StartsWith("gifts/")
&& !c.ThumbnailAltText.StartsWith("email/")
&& !c.ThumbnailAltText.StartsWith("news/")
&& !c.ThumbnailAltText.StartsWith("promotions/")
&& !c.ThumbnailAltText.StartsWith("the-knowledge/")))
.Distinct(new CategotiesEqualityComparer()).ToList();
ОШИБКА: LINQ to Entities не распознает метод "System.Linq.IQueryable 1[WebMgr.ac_Categories]
Distinct[ac_Categories](System.Linq.IQueryable
1 [WebMgr.ac_Categories], System.Collections.Generic.IEqualityComparer`1 [WebMgr.ac_Categories])" метод, и этот метод не может быть переведен в выражение хранилища
ПРИМЕЧАНИЕ:
Я использую первый подход к базе данных и ac_Categories
создается с помощью этого...
Ответы
Ответ 1
Вы не можете передать сопоставление IEqualityComparer
в вызов в EF-запрос или, скорее всего, в большинство коллекций IQueryable
. IQueryable
- деревья выражений, это дерево выражений преобразуется в базовый запрос (например, SQL с EF). Таким образом, он не может выполнить ваш код в SQL.
Обычный вызов Distinct()
будет работать отлично, если вы хотите отфильтровать повторяющиеся идентичные записи, поскольку он будет выполнять SQL-разницу. Если вы примените свой сопоставитель равенства, вам придется вытащить данные в память, а затем применить свои отличительные признаки.