Я пытаюсь написать запрос Linq, который проверяет три поля: StateCode
, ChannelCode
и ZipCode
.Запрос Linq для получения поля, если он равен нулю или соответствует определенному значению
Я хочу проверить точное соответствие кода штата и канала. Однако, если запись в базе данных имеет значение null, то я хочу потянуть эту запись. Если это не null, я хочу вытащить его только в том случае, если почтовый индекс соответствует значению. Я попытался написать это несколько разных способов, и каждый из них терпит неудачу. Вот моя последняя попытка:
var similarZips = (from z in _db.ZipCodeTerritory
where z.StateCode.Equals(zipCode.StateCode) &&
z.ChannelCode.Equals(zipCode.ChannelCode)
select z).Where(x => x.Id != zipCode.Id &&
(x.ZipCode.Equals(null) || x.ZipCode.Equals(zipCode.ZipCode))).ToList();
Я также дал этому выстрел и получил те же результаты
var similarZips = (from z in _db.ZipCodeTerritory
where z.StateCode.Equals(zipCode.StateCode) &&
z.ChannelCode.Equals(zipCode.ChannelCode) &&
(z.ZipCode.Equals(null) ? z.ZipCode.Equals(null) : z.ZipCode.Equals(zipCode.ZipCode))
select z).Where(x => x.Id != zipCode.Id).ToList();
EDIT
Проблема происходит здесь происходит только тогда, когда значение zipCode.ZipCode
является NULL
, В этом случае это заявление является избыточным x.ZipCode.Equals(null) || x.ZipCode.Equals(zipCode.ZipCode)
- Я в основном прошу его проверить null
или что-то такое, что .Equal(null)
.
Мне нужно переписать запрос, аналогичный приведенному ниже. Однако проблема, с которой я столкнулась, теперь находится в первой части тройного заявления. Если значение zipCode.Zipcode
равно null, то я просто хочу захватить все записи с совпадающим состоянием и комбинацией кода канала (любой zip будет делать). Однако, если zip определен, то я хочу только захватить комманды state/channel с соответствующим почтовым индексом или нулевым почтовым индексом. Я застрял на той части, где, если значение zipCode.ZipCode
равно null
Я говорю запрос, чтобы захватить все записи.
var similarZips = (from z in _db.ZipCodeTerritory
where z.StateCode.Equals(zipCode.StateCode) &&
z.ChannelCode.Equals(zipCode.ChannelCode) &&
(zipCode.ZipCode.Equals(null) ?
<any zip will do> :
(z.ZipCode.Equals(zipCode.ZipCode) || z.ZipCode.Equals(null)))
select z).Where(x => x.Id != zipCode.Id).ToList();**
Это кажется обрабатывать первый случай неправильно - если ZIP код указан только записи с совпадающим ZIP кодом извлекается, но записи с нулевым ZIP кодом опущены в то время как они должны быть включены, если я понимаю вопрос правильно , –