У меня есть класс, который по существу преобразует фильтр сетки в динамическое выражение linq. Сетка содержит простой поиск, который принимает один вход от пользователя, и я хотел бы создать оператор contains, который может использоваться как общий поиск. Тем не менее, я не могу найти способ создания выражения, чтобы я мог использовать десятичный тип и создать запрос sql (например) sql.Linq Expression Decimal Содержит метод
Вещи, которые я пробовал, но безрезультатно.
Объяснение, определяющее как строку, я предполагал, что смогу использовать метод «Содержит» от typeof(string)
. Однако он не работает b/c, он знает свой десятичный тип, а не строку. Instance property 'Total' is not defined for type 'System.String'
var parm = Expression.Parameter(typeof(string), "param");
var exp = Expression.Property(parm, filter.PropertyName);
return Expression.Call(exp, containsMethod, constant);
Создание свой собственный метод для десятичной ..Это кажется, что этот менталитет не представляется возможным, потому что не было бы путь для LINQ, чтобы сгенерировать запрос от этого. LINQ может использовать только известные нативные методы, правильно ли это звучит?
Expression callExpr = Expression.Call(
typeof (decimal), "Contains", new[] {member.Type}, constant, param);
public static bool Contains(this decimal obj, string value)
{
String _this = obj.ToString();
return _this.Contains(value);
}
В конечном счете она должна генерировать следующий SQL
where total like '%43%'
и общее время в ТипДанных десятичной
Я попробовал несколько других способов, но его не очень хорошо, любая помощь будет очень оценили.
Вы говорите о Lonq-to-Entities или Linq-to-SQL (или другом)? –
Использование Entity Framework 5.0 – afreeland
Я действительно смущен этим вопросом. Вы говорите, что ваш первый запрос завершился неудачно, потому что 'string' не имеет' Total'. Но 'decimal' тоже этого не имеет. Вы пытаетесь вызвать 'decimal.Contains()', что также не имеет большого смысла. – svick