使用linq查询无法获得数字

时间:2017-09-13 16:33:31

标签: c# linq

我想只获取字符串中的数字部分:

Hello World 5

所以结果必须是:5

我做的是:

var temp = from c in "Hello World 5"
           select c
           where Char.IsDigit(c);

但我在c上收到错误,编译器需要;,但我不明白为什么,查询还没有结束。

2 个答案:

答案 0 :(得分:4)

订单为from - where - select,因此您应重新排序whereselect

var temp = from c in "Hello World 5" where Char.IsDigit(c) select c;

这在csharp交互式shell中生成:

csharp> var temp = from c in "Hello World 5" where Char.IsDigit(c) select c;
csharp> temp
{ '5' }

因此这是IEnumerable<Char>

csharp> temp.GetType();
System.Linq.Enumerable+WhereEnumerableIterator`1[System.Char]

您也可以使用等效的函数调用,在这种情况下,select不是必需的:

var temp = "Hello World 5".Where(Char.IsDigit);

编辑:如果您希望将LINQ查询的结果连接到一个字符串,可以使用String.Concat

csharp> String.Concat("Hello World 5".Where(Char.IsDigit)); 
"5"
csharp> String.Concat(from c in "Hello World 5" where Char.IsDigit(c) select c);
"5"

答案 1 :(得分:1)

您的语法错误,select属于最后:

var temp = from c in "Hello World 5"
           where Char.IsDigit(c)
           select c;

由于您将select移到了错误的位置,因此编译器需要;之前(然后也是意外的)where

请注意,temp不是单个字符,而是包含单个元素'5'的序列。