Насколько динамично я могу создавать свои операторы LINQ To SQL? - PullRequest
5 голосов
/ 14 мая 2010

Мне нужно создать оператор LINQ To SQL во время выполнения на основе ввода от пользователя, и я не могу понять, как динамически построить предложение WHERE.

У меня нет проблем со следующим:

string Filters = "<value>FOO</value>";
Where("FormattedMessage.Contains(@0)",Filters)

Но что мне действительно нужно, так это сделать весь оператор WHERE динамическим. Таким образом, я могу добавить несколько условий во время выполнения, как это (грубая идея):

 foreach (Filter filter in filterlist)
            {
                whereclause = whereclause + "&& formattedmessage.contains(filter)";
            }

Ответы [ 2 ]

1 голос
/ 14 мая 2010

Я не знаю, какие типы данных здесь используются, но почему бы вам не попробовать использовать общий запрос?

var query = context.Messages
    .AsQueryable();

foreach (Filter filter in filterlist)
{
    query = query
        .Where(m => m.Contains(filter));
}

это объединит все условия, используя AND (как в вашем вопросе).

0 голосов
/ 15 мая 2010

Вы также можете рассмотреть возможность использования класса PredicateBuilder.Использование этого позволит вам динамически добавлять условия И / ИЛИ в ваше дерево.См. http://www.albahari.com/nutshell/predicatebuilder.aspx

...