Прежде чем кто-либо прыгнет на отметку как дубликат, я посмотрел, и все делают что-то немного более сложное, чем я пытаюсь.
Итак, я работаю с базой данных, где нужно проверить много данных, и расширение LINQ Any (), переведенное в SQL, не так быстро, как SQL Count (1)> 0, поэтому везде я пишу:
var someBool = Ctx.SomeEntities.Count(x => x.RelatedEntity.Count(y => y.SomeProperty == SomeValue) > 0) > 0;
В Pseudo: Имеет ли какая-либо из моих сущностей отношения с какой-либо другой сущностью, у которой есть свойство со значением SomeValue.
Это отлично работает и работает быстро. Тем не менее, он не совсем читабелен (и у меня их много, более встроенных, чем в случаях), поэтому я хотел бы заменить его на:
var someBool = Ctx.SomeEntities.AnyX(x => x.RelatedEntity.AnyX(y => y.SomeProperty == SomeValue));
с:
public static bool AnyX<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate) => source.Count(predicate) > 0;
Итак, вы видите, что я не делаю ничего, что LINQ не может перевести на SQL, я не делаю ничего, что LINQ уже не переводит на SQL, а просто создаю дополнительное расширение, которое я получаю:
LINQ to Entities не распознает метод Boolean AnyX и т. Д. *
Должен быть какой-то способ написания моего расширения или какой-то способ сказать LINQ, просто чтобы взглянуть на код, и вы увидите, что вы можете это сделать.