簡體   English   中英

在Linq需要幫助

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM