5

I have the need to construct a LINQ To SQL statement at runtime based on input from a user and I can't seem to figure out how to dynamically build the WHERE clause.

I have no problem with the following:

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

But what I really need is to make the entire WHERE clause dynamic. This way I can add multiple conditions at runtime like this (rough idea):

 foreach (Filter filter in filterlist)
            {
                whereclause = whereclause + "&& formattedmessage.contains(filter)";
            }
mcass20
  • 1,668
  • 1
  • 22
  • 39
  • Take a look at Dynamic Linq. Here is a link to get you started: http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx – Randy Minder May 14 '10 at 15:07

2 Answers2

1

I don't know what data types are being used here, but why don't you try to use general query?

var query = context.Messages
    .AsQueryable();

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

this will concatenate all the conditions using AND (as is in your question).

Oleks
  • 31,955
  • 11
  • 77
  • 132
0

You may also consider using the PredicateBuilder class. Using that will allow you to dynamically add AND/OR conditions to your tree. Refer to http://www.albahari.com/nutshell/predicatebuilder.aspx

Saurabh Kumar
  • 2,329
  • 6
  • 32
  • 52