[英]Need help in Linq
我在写Linq查询只是为了学习。
var result = Process.GetProcesses()
.Where(p => p.WorkingSet64 > 20 * 1024 * 1024)
.OrderByDescending(p => p.WorkingSet64)
.Select(p => new {p.Id,p.ProcessName,p.WorkingSet64 });
我想在迭代导致
foreach(process in result) //error-type or namespace process could not be found.
{
Console.WriteLine(Process.ProcessName);
}
我想遍历结果并在控制台上打印每个进程名称。
我做错了。
您接近:
foreach (var process in result) {
Console.WriteLine(process.ProcessName);
}
(我假设您之前没有声明过名称process
。)
还要注意,如果在foreach行中使用process(带有小p),则在循环内使用它时,需要保持相同的大小写。
您是否在循环之前声明了process
? 如果不是,则应将for each
更改for each
foreach(var process in result)
{
Console.WriteLine(process.ProcessName);
}
考虑对更短的代码使用LINQ的查询语法:
var result = from p in Process.GetProcesses()
where p.WorkingSet64 > 20 * 1024 * 1024
orderby p.WorkingSet64 descending
select new { p.Id, p.ProcessName, p.WorkingSet64 };
然后,而不是循环,在LINQ中考虑做同样的事情:
Console.WriteLine(string.Join("\r\n", result.Select(p => p.ProcessName)));
编辑:上面使用的string.Join()重载仅在.NET 4.0中引入。 要使用早期版本中可用的重载,该重载接受string[]
而不是IEnumerable<string>
,只需在.Select()
之后链接.ToArray()
.Select()
:
Console.WriteLine(string.Join("\r\n", result.Select(p => p.ProcessName).ToArray()));
您还可以将查询投影到进程列表中:
List<Process> result = Process.GetProcesses()
.Where(p => p.WorkingSet64 > 20 * 1024 * 1024)
.OrderByDescending(p => p.WorkingSet64).ToList();
foreach(Process process in result)
{
Console.WriteLine(process.ProcessName);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.