У меня есть этот код:
string name ="M";
Expression<Func<Organization, bool>> getExpression1 = r => r.Name.Contains(name);
Expression<Func<Organization, bool>> getExpression2 = r => r.Name.Contains("M");
GetOrgListBy(getExpression);
GetOrgListBy(getExpression2);
public IEnumerable<Organization> GetOrgListBy(Expression<Func<Organization, bool>> filter)
{
return DataContext.Parties.OfType<Organization>().Where(filter).ToList();
}
Вопрос: Я передаю простое выражение в функцию репозитория, которая получает List<Organization>
путем сопоставления переданного имени.Когда я просматриваю трассировку sql для getExpression1
(использует строковую переменную), выражение генерирует инструкцию [Name] like plinq_variable
sql, в которой отсутствует оператор %
.Мое намерение состоит в том, чтобы сгенерировать оператор [Name] like '%' + plinq_variable + '%'
sql
Однако, когда я при использовании getExpression2
(жестко запрограммировал строку), выражение успешно генерирует оператор [Name] like N'%M%'
sql.
Почему getExpression1
не генерирует оператор %
?Как я могу заставить его генерировать оператор %
в sql, как getExpression2
?