Использование пользовательских сопоставлений в запросах Linq? Являются ли они полезными или это просто перегрузка на сервере.Запросы Linq на дБ и использование пользовательских сопоставлений
Так я говорю о запросах, как
IEnumerable<Class> GetMatch(Class comparerObject)
{
return Session.Linq<Class>().Where(x=>new StringComparer<Class>().Equals(x,comparerObject))
}
и это, как мой класс StringComparer выглядит
public class StringComparer<T> : IEqualityComparer<T>
where T : class, IStringIdentifiable
{
public bool Equals(T x, T y)
{
if (x == null && y == null)
return true;
if (x == null || y == null)
return false;
return x.Id.Equals(y.Id, StringComparison.OrdinalIgnoreCase);
}
Так мне было интересно, как это запрос запустить с БД? Я думаю, что linq обрабатывает это внутренне, где в нем отправляется запрос в db только после запуска всех случаев сравнения.
Edit:
Ну, если вы обнаружили, что трудно поверить, что не будет работать, а затем взять простой пример, как
return Session.Linq<Class>().Where(x=>x.Id.Equals(comparerObject,StringComparison.InvariantCultureIgnoreCase))
Тогда как вы думаете, это ожидаемое поведение?
Спасибо.
У меня создалось впечатление, что если Linq не знает, как перевести данный кусок кода в SQL, он просто вытащит все данные без этого условия и применит его к коллекции in-memory вместо отказа при выполнении время? Или я думаю о чем-то несвязанном? – R0MANARMY
@ R0MANARMY: вы можете сделать это, если хотите, выбрав AsEnumerable, но по умолчанию это не будет сделано. –
Благодарим вас за разъяснение, что вам придется помнить, что IQueryable не любит вещи, которые он не может перевести. – R0MANARMY