C# 使用lambda的MVC4中的类似条件

C# 使用lambda的MVC4中的类似条件,c#,asp.net-mvc-4,C#,Asp.net Mvc 4,有没有一种方法可以让我像使用lambda在MVC中执行查询一样执行类似条件的操作?我目前有: return repository.GetAll().Where( m => string.(m.Name, name, StringComparison.OrdinalIgnoreCase)); 那么,如何使其成为类似条件呢?根据您的要求使用Contains()或StartsWith()或EndsWith(): var filtered= data.Where(x=&g

有没有一种方法可以让我像使用lambda在MVC中执行查询一样执行类似条件的操作?我目前有:

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)

提到的另一个选项是使用
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);

如果使用设置为CI的MS Sql数据库(不区分大小写),则不需要使用StringComparison枚举。缺少右括号只是为了澄清,这将生成类似的条件:(x.Name类似于“%myVal%”),而不是(x.Name类似于“myVal”)难道你不需要
%
?除非他在类似的比较中需要。他没有说他想要一个“包含”类型的比较