【问题标题】:IEnumerable<Process> Linq queryIEnumerable<Process> Linq 查询
【发布时间】:2012-09-03 01:39:47
【问题描述】:

在这段代码中尝试按名称获取进程 如何添加第二个过滤器来查询

      IEnumerable<Process> processList =

                from p in Process.GetProcesses()
                where p.ProcessName.StartsWith("Mon") || p.ProcessName.StartsWith("Tue")
                select p;

这是我尝试纠正的,上面的例子可以正常工作

【问题讨论】:

  • 您的意思是您想在 where 子句中添加更多内容?只需使用 && 或 ||并不断添加条件。

标签: c# linq process ienumerable


【解决方案1】:
IEnumerable<Process> processList = from p in Process.GetProcesses()
                where p.ProcessName.StartsWith("Mon") && p.Property == somethingElse && ...
                select p;

如果需要 AND 条件,只需添加 && 或 ||如果你想要 OR 条件。

在 OP 评论后编辑:

如果您想访问 IEnumerable 的元素:

var element1 = processList.ElementAt(0);

如果要遍历所有元素,可以使用 foreach。

     foreach (var i in processList)
    {
    Response.Write(i.ProcessName);
    //or if you're using a console application: Console.WriteLine(i.ProcessName);
    }

【讨论】:

  • 什么是 ToList() 以及您为什么使用它或我们应该在哪里使用它。 IEnumerable 还不是我们可以使用的东西?
  • 我以为你有 List 而不是 IEnumerable,它在查询结束时需要一个 .ToList() 来编译。
  • @Jand Doe 你将如何访问IEnumerable 中的第一个“单元格”,在一个普通数组中:MyArray[0] 在这里如果我想避免 foreach 如何访问 p .name id ...
  • 第一个单元格?你的意思是列表的第一个元素?
  • 我编辑了我的答案,尽管我不明白你为什么要避免使用 foreach。我想回答你的问题,要获取 IEnumerable 的元素,你使用 .ElementAt(index) 而不是像数组一样使用索引方括号 []
【解决方案2】:
IEnumerable<Process> processList =
    from p in Process.GetProcesses()
    where p.ProcessName.StartsWith("Mon")
    where p.ProcessName.EndsWith("day")
    select p;

【讨论】:

  • 谢谢,我试过使用:where () || () 。而不是哪里 () ||哪里()
【解决方案3】:

我的回答是在 OP 更正问题以演示扩展方法之后

IEnumerable<Process> processes = 
Process.GetProcesses()
.Where(p => p.ProcessName.StartsWith("Mon") || p.ProcessName.EndsWith("Tue"));

【讨论】:

    猜你喜欢
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多