C#Lambda忽略大小写

时间:2015-06-26 15:51:47

标签: c# lambda

我想忽略使用此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项。 我该如何修改此查询?

4 个答案:

答案 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”不分青红皂白的情况。