public static void MyFunction(MyErrorClass err)
{
var query = from filter in DataContext.ErrorFilters select filter;
query = query.Where(f => err.ErrorMes
It seems you should be using f.ErrorMessage.Contains(err.ErrorMessage)
- linq to sql should then convert this to WHERE ErrorFilter.ErrorMessage LIKE %err.ErrorMessage%
. The problem with the way you have it is that the generated SQL would need a dynamic string to match in the where clause, and hence could only be filtered on the client.
Incidently, the var query = from filter in DataContext.ErrorFilters select filter;
line is not required and you can just do:
var filters = DataContext.ErrorFilters.Where(f => f.ErrorMessage.Contains(err.ErrorMessage)).ToList();
EDIT:
Ok I see what you're trying to do now, but I'm not sure if this is possible in linq2sql. You could create a stored procedure and add that to your datacontext and do the mapping from the output to a sequence of ErrorFilter objects:
create procedure GetMatchingFilters @message varchar(500)
as
begin
select *
from ErrorFilter
where @message LIKE '%'+ErrorMessage+'%'
end
Then in your datacontext you can do:
DataContext
.GetMatchingFilters(err.ErrorMessage)
.Select(result => new ErrorFilter {...})
.ToList();
Hmm... It seems the Linq2SQL IndexOf
translation is smarter than for Contains
. This should work:
public static void MyFunction(MyErrorClass err)
{
var query = DataContext.ErrorFilters;
query = query.Where(f => err.ErrorMessage.IndexOf(f.ErrorMessage)>=0);
List<ErrorFilter> filters = query.ToList();
//...more code
}
In LinqPad it can be seen this uses CHARINDEX
, because we've asked for more than just "contains", rather "where is it", but it is happy to work with server-side expressions.