Несколько операторов OR в запросе EF4 - PullRequest
1 голос
/ 15 октября 2011

Я пытаюсь создать запрос, который будет делать что-то вроде:

column like 'a' or column like 'B' or column like 'C' //unknown number of OR

Как я могу сделать это в EF4, в nHibernate у меня будет дизъюнкция.

Спасибо.

Ответы [ 3 ]

3 голосов
/ 24 октября 2011

Вам нужно будет построить дерево выражений динамически.Взгляните на PredicateBuilder .

PredicateBuilder может помочь вам динамически строить деревья выражений.

0 голосов
/ 05 января 2014

Есть много подходов, которые вы можете сделать это. Но вы должны знать преимущества и недостатки каждого из них. Посмотрите, как выполняет LINQ to SQL, PredicateBuilder из LINQKit и хранимые процедуры для выполнения этой задачи!

http://kalcik.net/2014/01/05/joining-data-in-memory-with-data-in-database-table/

0 голосов
/ 24 октября 2011

Если вы хотите полное совпадение (ваш пример показывает только полное совпадение), вы можете сделать это:

string items = new string[] { "a", "b", "c" };
var query = from x in context.Entities
            where items.Contains(x.Column)
            select x;

Это работает только в EF 4+ и переводится в column IN ('a', 'b', c').Для более продвинутого общего решения вам действительно нужно динамически строить дерево выражений, как упомянуто @Wouter de Kort, или использовать ESQL, где вы пишете запрос в виде строки (и вы можете объединить столько строк, сколько вам нужно).Если вы ожидаете подстановочный поиск со сложными шаблонами поиска, вам придется использовать ESQL или, по крайней мере, создать определенную моделью функцию, повторно используемую в динамически создаваемом дереве выражений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...