LINQ作为方法参数

本文关键字:参数 方法 LINQ | 更新日期: 2023-09-27 18:15:08

我有一个像这样的简单对象

public class Test
{
   public string Name {get; set;}
}

之后是List<Test> tests

然后我有一个方法在List中使用Test对象做一些事情。

private void DoSomething(Test test)
{
   //do some serious stuff here!
}

然后在应用程序中,这个Test对象将在TreeView中填充,在用户单击它们之后,它们将被传递给上面的方法。目前,我发现选中的树节点如下:

string name = selectedNode.Text;
foreach(Test test in tests)
{
   if (test.Name = name) DoSomething(test);
}

所以我的想法是,我不能想出一种方法在方法的参数中使用LINQ,而不是做那个无聊的foreach循环。

this.DoSomething(from x in tests where x.Name = "What I need to pass" select x)

怎么了?

谢谢!

LINQ作为方法参数

this.DoSomething(tests.FirstOrDefault(x=>x.Name=="What I need to pass"))

您实际上是在进行搜索。假设名称是唯一的,您可以这样做:

var selectedTest = tests.SingleOrDefault(test => test.Name == selectedNode.Text);
if (selectedTest != null)
{
    DoSomething(selectedTest);
}

linq查询的结果是一个iquerable对象。你可以用它作为参数

下面的代码片段可以工作。我不推荐它,除非你在DoSomething方法中检查空情况。您应该首先运行LINQ查询,存储结果并在将它们传递给新方法之前检查它们。

this.DoSomething(
     (from x in tests 
      where x.Name = "What I need to pass" 
      select x).FirstOrDefault() as Test);