LINQ to SQL查询以确定值是否以数字开头

Chr*_*ård 4 .net c# linq-to-sql

我有一个项目,我通过第一个字母查询用户:

repository.GetAll().Where(q => q.BrukerIdent.StartsWith(letter.ToString())).ToList();
Run Code Online (Sandbox Code Playgroud)

..where repository.GetAll()返回一个IQueryable<Bruker>,BrukerIdent是一个包含用户名的字符串,并且letter是一个char值.这很好用,除了我还想让用户以数字开头.而且我不想按单独的数字排序.

我的脑子里大喊大叫StartsWith("\d")但据我所知,它不会这样.我还想过做一个10路OR条款,但这看起来像意大利面条,而且我不确定效率.

有没有"正确"的方式这样做?

Ale*_*lex 13

如果这是LINQ-to-SQL,你可以SqlMethods.Like在这里使用方法:

var result = repository
    .GetAll()
    .Where(q => SqlMethods.Like(q.BrukerIdent, "[0-9]%"))
    .ToList();
Run Code Online (Sandbox Code Playgroud)

  • +1.问题的标题指定LINQ to SQL - 这个答案是LINQ to SQL - 即过滤将在DB服务器上完成.我相信@abatishchev接受的答案将使用LINQ to Objects(在客户端上过滤),原始问题中的示例也是如此. (2认同)

aba*_*hev 7

repository.GetAll().Where(q => Char.IsNumber(q.BrukerIdent[0]))
Run Code Online (Sandbox Code Playgroud)

MSDN


var numbers = Enumerable
                     .Range(0, 10)
                     .Select(i => i.ToString(CultureInfo.InvariantCulture));

// var numbers = new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 );
// var numbers = HashSet<int> { ... };

var q = from b in repository.GetAll()
        where numbers.Contains(b.BrukerIdent.FirstOrDefault())) //[0]
        select b;
Run Code Online (Sandbox Code Playgroud)