我想忽略使用此LAMBDA查询的案例:
public IEnumerable<StationDto> StationSearch(string search)
{
var data = GenerateDtos();
var list = data.Where(x => x.StationName.Contains(search));
//var searchDto = new SearchDto {
return null;
}
private static IEnumerable<StationDto> GenerateDtos()
{
return new List<StationDto>()
{
new StationDto()
{
StationId = 1,
StationName = "DARTFORD"
},
new StationDto()
{
StationId = 2,
StationName = "DARTMOUTH"
},
new StationDto()
{
StationId = 3,
StationName = "TOWER HILL"
},
new StationDto()
{
StationId = 4,
StationName = "DERBY"
},
new StationDto()
{
StationId = 5,
StationName = "lIVERPOOL"
},
new StationDto()
{
StationId = 6,
StationName = "LIVERPOOL LIME STREET"
},
new StationDto()
{
StationId = 7,
StationName = "PADDINGTON"
},
new StationDto()
{
StationId = 8,
StationName = "EUSTON"
},
new StationDto()
{
StationId = 9,
StationName = "VICTORIA"
},
};
}
}
如果我搜索&#34; DAR&#34;它会带回两个但是&#34; dar&#34;带回0项。 我该如何修改此查询?
答案 0 :(得分:5)
假设你在谈论x.StationName.Contains(search)
你可以做什么
var list = data
.Where(x => x.StationName.IndexOf(search, StringComparison.OrdinalIgnoreCase) >= 0)
您还可以添加String
扩展方法
public static class StringExtensions
{
public static bool Contains(this string thisObj, string value, StringComparer compareType)
{
return thisObj.IndexOf(value, StringComparison.OrdinalIgnoreCase) >= 0;
}
}
并像这样使用
var list = data
.Where(x => x.StationName.Contains(search, StringComparison.OrdinalIgnoreCase));
答案 1 :(得分:3)
这样的事情会起作用:
var list = data.Where(x => x.StationName.ToLower().Contains(search.ToLower()));
或者
var list = data.Where(x => x.StationName.Contains(search, StringComparer.OrdinalIgnoreCase);
不确定第二种语法是否正确。我想是的。
答案 2 :(得分:1)
使用以下内容:
var url = require('url');
var http = require('http');
var options = [{
method: 'HEAD',
host: 'codepen.io',
port: 80,
path: '/subash/pen/koCvm'
}, {
method: 'HEAD',
host: 'google.com',
port: 80,
path: '/'
}, {
method: 'HEAD',
host: 'tutsplus.com',
port: 80,
path: '/courses/introduction-to-wordpress-plugin-development'
}];
for (var i = 0; i < options.length; i++) {
console.log(options[i].host);
var req = http.request(options[i], function(r) {
console.log('\n***************************************');
console.log('\n', JSON.stringify(r.headers.status));
console.log('***************************************\n');
});
req.end();
}
答案 3 :(得分:1)
您可以使用Fody这是为.net创建的IL Weaving工具,并使用Caseless插件。
使用此库时,您可以编写这样的代码(根据文档):
public bool Foo()
{
var x = "a";
var y = "A";
return x == y;
}
但会编译为:
public bool Foo()
{
var x = "a";
var y = "A";
return string.Equals(x, y, StringComparison.OrdinalIgnoreCase);
}
这样您就不必记得设置ignorecase或ToUpper
/ ToLower
。我不了解你,但我想不出的时候我真的想要区分大小写的字符串比较......这可以应用到整个项目中,所以你永远不必记得再做一次! :)
在您的具体示例中,您使用的现有代码:
var list = data.Where(x => x.StationName.Contains(search));
会带回所有“DAR”不分青红皂白的情况。