string grid = @"08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08";
string[] res = grid.Split(' ');
var lowNums = from n in res
where n.Length > 0
select int.Parse(n);
Run Code Online (Sandbox Code Playgroud)
我无法将上述linQ语句转换为lambda WHERE等效语句.以下工作,但只返回上午,enumernable<string>而我想要一个enumerable<int>:
IEnumerable<string> all = res.Where(x => x.Length > 0);
Run Code Online (Sandbox Code Playgroud)
Eri*_*ert 10
我无法将上述LINQ语句转换为lambda Where()等效.
您想要做的是仔细阅读C#规范的第7.16.2节.它将引导您逐步完成整个过程.
它说:
带有where子句的查询表达式
from x in e
where f
...
Run Code Online (Sandbox Code Playgroud)
被翻译成
from x in ( e ) . Where ( x => f )
...
Run Code Online (Sandbox Code Playgroud)
所以你的查询
from n in res
where n.Length > 0
select int.Parse(n);
Run Code Online (Sandbox Code Playgroud)
被翻译成
from n in (res).Where(n=>n.Length > 0)
select int.Parse(n)
Run Code Online (Sandbox Code Playgroud)
这是翻译的第一阶段.现在再回到规范:
表单的查询表达式
from x in e select v
Run Code Online (Sandbox Code Playgroud)
被翻译成
( e ) . Select ( x => v )
Run Code Online (Sandbox Code Playgroud)
所以你翻译过的一次查询
from n in (res).Where(n=>n.Length > 0)
select int.Parse(n)
Run Code Online (Sandbox Code Playgroud)
进一步翻译成
((res).Where(n=>n.Length > 0)).Select(n=>int.Parse(n))
Run Code Online (Sandbox Code Playgroud)
现在它不再是一个查询表达式,所以不再进行语法翻译.
以下应该有效.你刚忘了这个select条款.
res.Where(n => n.Length > 0).Select(n => int.Parse(n));
Run Code Online (Sandbox Code Playgroud)
该where条款不会将您的数据更改为int.但是,Select(lambda)可以.
您需要包含对int.Parse的调用以将结果转换为int.由于你在"where"子句之后执行此操作,这将需要一个Select(),它基本上允许您更改可枚举的形式(即:将其映射到新类型,在这种情况下,从字符串转换为INT):
var lowNums = res.Where(n => n.Length > 0).Select(n => int.Parse(n));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
443 次 |
| 最近记录: |