此代码区分大小写,如何使其不区分大小写?
public IQueryable<FACILITY_ITEM> GetFacilityItemRootByDescription(string description)
{
return this.ObjectContext.FACILITY_ITEM.Where(fi => fi.DESCRIPTION.Contains(description));
}
答案 0 :(得分:230)
fi => fi.DESCRIPTION.ToLower().Contains(description.ToLower())
答案 1 :(得分:111)
如果在数据库上下文中执行LINQ查询,则对Contains()
的调用将映射到LIKE
运算符:
.Where(a => a.Field.Contains("hello"))
变为Field LIKE '%hello%'
。 LIKE
运算符默认情况下不区分大小写,但可以通过changing the collation of the column进行更改。
如果在.NET上下文中执行LINQ查询,则可以使用IndexOf(),但LINQ to SQL不支持该方法。
将CultureInfo作为参数的LINQ to SQL does not support methods,可能是因为它无法保证SQL服务器处理与.NET相同的文化。这不完全正确,因为 支持StartsWith(string, StringComparison)
。
但是,它似乎不支持在LINQ to SQL中求值为LIKE
的方法,以及.NET中不区分大小写的比较,从而无法以一致的方式对不区分大小写的Contains()进行操作
答案 2 :(得分:60)
假设我们在这里使用字符串,这是使用IndexOf()
的另一个“优雅”解决方案。
public IQueryable<FACILITY_ITEM> GetFacilityItemRootByDescription(string description)
{
return this.ObjectContext.FACILITY_ITEM
.Where(fi => fi.DESCRIPTION
.IndexOf(description, StringComparison.OrdinalIgnoreCase) != -1);
}
答案 3 :(得分:11)
这里接受的答案没有提到一个事实,如果你有一个空字符串ToLower()将抛出异常。更安全的方法是:
fi => (fi.DESCRIPTION ?? string.Empty).ToLower().Contains((description ?? string.Empty).ToLower())
答案 4 :(得分:5)
使用C#6.0(允许表达式身体函数和空传播),对于LINQ to Objects,它可以在一行中完成(也检查null):
public static bool ContainsInsensitive(this string str, string value) => str?.IndexOf(value, StringComparison.OrdinalIgnoreCase) >= 0;
答案 5 :(得分:4)
在这种情况下,IndexOf效果最佳
return this
.ObjectContext
.FACILITY_ITEM
.Where(fi => fi.DESCRIPTION.IndexOf(description, StringComparison.OrdinalIgnoreCase)>=0);
答案 6 :(得分:3)
您可以使用string.Compare
lst.Where(x => string.Compare(x,"valueToCompare",StringComparison.InvariantCultureIgnoreCase)==0);
如果您只想查看包含,请使用&#34;任何&#34;
lst.Any(x => string.Compare(x,"valueToCompare",StringComparison.InvariantCultureIgnoreCase)==0)
答案 7 :(得分:1)
public static bool Contains(this string input, string findMe, StringComparison comparisonType)
{
return String.IsNullOrWhiteSpace(input) ? false : input.IndexOf(findMe, comparisonType) > -1;
}
答案 8 :(得分:0)
d = {'case': [1,2,3,4,5], 'registration_datetime': ['2013-01-01
00:00:16','2013-01-01 00:04:19','2013-01-01 00:12:53','2013-01-02
00:16:40','2013-01-02 00:21:40'],'discharge_datetime':['2013-01-01
01:41:02','2013-01-01 04:20:05
','2013-01-01 06:20:22
','2013-01-02 02:01:13
','2013-01-02 05:48:49
']}
df=pd.DataFrame(data=d)
spe_dates = DatetimeIndex(['2013-01-01', '2013-01-15',...])
答案 9 :(得分:0)
老实说,这并不困难。似乎一开始就是这样,但事实并非如此。这是一个完全按照要求执行的C#中的简单linq查询。
在我的示例中,我正在处理具有一个名为FirstName的属性的人员列表。
var results = ClientsRepository().Where(c => c.FirstName.ToLower().Contains(searchText.ToLower())).ToList();
这将以小写形式搜索数据库,但返回完整大小写的结果。