kongalshiva549 Ответов: 2

Запрос LINQ с условием where


у меня есть выбор в linq и в том состоянии, в котором я проверяю два раза замечания. Есть ли способ оптимизировать вместо того, чтобы иметь andalso условие.

dim List = (From c In db.DevData
                     Where c.remark <> "Cancelled" AndAlso c.remark <> "Completed"
                     Order By c.Id


Что я уже пробовал:

dim List = (From c In db.DevData
                     Where c.remark <> "Cancelled" AndAlso c.remark <> "Completed"
                     Order By c.Id

Maciej Los

Что вы подразумеваете под "оптимизацией", в каком контексте?

Обратите внимание, что мы не видим вас на экране и не можем читать в ваших мыслях. Не могли бы вы уточнить?

kongalshiva549

Вместо того чтобы писать С. замечание два раза, можно ли это сделать одним способом?

Maciej Los

Если вы хотите быть уверены, что система сообщит мне о ваших ответах, пожалуйста, используйте виджет "ответить". Вы найдете его рядом с ником (логином) - с правой стороны.

Как я уже говорил, вам нужно быть более конкретным. Я понятия не имею, как устроена ваша база данных, сколько там замечаний и почему вы их используете <> оператор вместо = (равный).

kongalshiva549

dim List = (из c в db.DevData
Где c.замечание &ЛТ;&ГТ; "аннулирован", атакже с.замечание &ЛТ;&ГТ; "завершен"
Заказ по c.Идентификатор

когда remark имеет значение null в базе данных, эти записи не извлекаются. есть ли проблема с вышеуказанным запросом?

Maciej Los

dim List = (From c In db.DevData
Where c.remark IsNot Nothing AndAlso c.remark <> "Cancelled" AndAlso c.remark <> "Completed"
Order By c.Id

kongalshiva549

даже если замечания, которые являются нулевыми, не отображаются

2 Ответов

Рейтинг:
1

F-ES Sitecore

Поместите ваши статусы ("завершено", "отменено" и т. д.) В их собственную таблицу с их собственными идентификаторами и сохраните идентификатор в вашем столбце DevData, поэтому, если Completed равен 1, у вас есть StatusID со значением 1 в DevData. Теперь вы можете делать свои where, используя цифры, а не текст, или вы можете присоединиться к DevData с таблицей состояния и сказать where Status.Имя <> "завершено" и т. д., И это должно работать намного лучше.


Рейтинг:
0

Maciej Los

Пожалуйста, сначала прочтите мои комментарии к вашему вопросу.

Вы можете использовать Where + Какой-нибудь[^], но я сомневаюсь, что это улучшит или даже оптимизирует производительность вашего запроса.

Dim remarks = {"Cancelled", "Completed"}
Dim list = from c in db.DevData.Where(Function(x) remarks.Any(Function(y) x.remark<>y))
           Order By c.Id
           Select ...


kongalshiva549

я попробовал с приведенным выше кодом это дает как выражение lamda не может быть преобразовано в Boolean потому что Boolean не является типом делегата