像使用 lambda 的 MVC4 中的条件
Like condition in MVC4 using lambda
有没有办法让我像在 MVC 中使用 lambda 查询一样执行条件?我目前有:
return repository.GetAll().Where(
m => string.(m.Name, name, StringComparison.OrdinalIgnoreCase));
那么我怎样才能使它成为类似的条件呢?
根据您的要求使用Contains()
或StartsWith()
或EndsWith()
:
var filtered= data.Where(x=> x.Name.ToLower().Contains(name.ToLower()));
在您的代码中:
return repository.GetAll().Where(
m => m.Name.ToLower().Contains(name.ToLower()));
通常你会使用m.Name.Contains
,这在这里是不可能的,因为它不支持不区分大小写,就像你现在写下来的那样。 (如果这不是故意的,请使用 m.Name.Contains(name)
)
提到的另一个选项here是使用CompareInfo.IndexOf
,但我不知道它是否适用于 EF。
试一试:
repository
.GetAll()
.Where
( m => CultureInfo.InvariantCulture.CompareInfo
.IndexOf(m.Name, name, CompareOptions.IgnoreCase) > 0
)
我之前处理过的唯一方法是使用原始 sql 语法,例如
context.Blogs.SqlQuery("SELECT * FROM SomeTable WHERE SomeTable.Name like {0}", name);
有没有办法让我像在 MVC 中使用 lambda 查询一样执行条件?我目前有:
return repository.GetAll().Where(
m => string.(m.Name, name, StringComparison.OrdinalIgnoreCase));
那么我怎样才能使它成为类似的条件呢?
根据您的要求使用Contains()
或StartsWith()
或EndsWith()
:
var filtered= data.Where(x=> x.Name.ToLower().Contains(name.ToLower()));
在您的代码中:
return repository.GetAll().Where(
m => m.Name.ToLower().Contains(name.ToLower()));
通常你会使用m.Name.Contains
,这在这里是不可能的,因为它不支持不区分大小写,就像你现在写下来的那样。 (如果这不是故意的,请使用 m.Name.Contains(name)
)
提到的另一个选项here是使用CompareInfo.IndexOf
,但我不知道它是否适用于 EF。
试一试:
repository
.GetAll()
.Where
( m => CultureInfo.InvariantCulture.CompareInfo
.IndexOf(m.Name, name, CompareOptions.IgnoreCase) > 0
)
我之前处理过的唯一方法是使用原始 sql 语法,例如
context.Blogs.SqlQuery("SELECT * FROM SomeTable WHERE SomeTable.Name like {0}", name);