Если вы используете коллекцию в памяти в качестве фильтра, вероятно, лучше использовать отрицание Contains (). Обратите внимание, что это может не сработать, если список слишком длинный, и в этом случае вам нужно будет выбрать другую стратегию (см. Ниже информацию об использовании стратегии для полностью ориентированного на DB запроса).
var exceptionList = new List<string> { "exception1", "exception2" };
var query = myEntities.MyEntity
.Select(e => e.Name)
.Where(e => !exceptionList.Contains(e.Name));
Если вы исключаете данные из другого запроса к базе данных, лучше использовать Except
. (Вот ссылка на поддерживаемые расширения набора в LINQ to Entities)
var exceptionList = myEntities.MyOtherEntity
.Select(e => e.Name);
var query = myEntities.MyEntity
.Select(e => e.Name)
.Except(exceptionList);
Это предполагает сложную сущность, в которой вы исключаете определенные, зависящие от какого-либо свойства другой таблицы, и хотите, чтобы имена сущностей не были исключены. Если вам нужна вся сущность, вам нужно будет создать исключения как экземпляры класса сущности так, чтобы они удовлетворяли оператору равенства по умолчанию (см. docs ).