LINQ作为方法参数

时间:2011-11-19 21:04:58

标签: c# linq

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

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

后来我有List<Test> tests

然后我有一个方法可以对列表中的Test对象执行某些操作。

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

然后在applciation中,这个Test对象将填充在TreeView中,用户点击它们后,它们将被传递给上面的方法。目前我发现这样选择了treenode:

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)

出了什么问题?

谢谢!

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

你在这里有效地进行搜索。假设名称是唯一的,您可以这样做:

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

答案 2 :(得分:1)

linq查询会生成IQueryable对象。所以你可以用它作为参数。

答案 3 :(得分:1)

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

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