C# LINQ作为方法参数

C# LINQ作为方法参数,c#,linq,C#,Linq,我有一个像这样的简单物体 public class Test { public string Name {get; set;} } 后来我有了列表测试 然后我有一个方法,它对列表中的Test对象执行一些操作 private void DoSomething(Test test) { //do some serious stuff here! } 然后在应用程序中,这个Test对象将填充到树视图中,用户单击它们后,它们将被传递到上面的方法。目前,我发现选定的treenode如下:

我有一个像这样的简单物体

public class Test
{
   public string Name {get; set;}
}
后来我有了
列表测试

然后我有一个方法,它对列表中的
Test
对象执行一些操作

private void DoSomething(Test test)
{
   //do some serious stuff here!
}
然后在应用程序中,这个
Test
对象将填充到树视图中,用户单击它们后,它们将被传递到上面的方法。目前,我发现选定的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)
怎么了


谢谢

您实际上是在这里进行搜索。假设名称是唯一的,则可以执行以下操作:

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

linq查询会产生一个IQueriable对象。因此,您可以将其用作参数。

下面的代码片段可以使用。但是我不推荐它,除非您在DoSomething方法中检查空案例。您应该运行LINQ查询,首先存储结果并检查它们,然后再将它们传递给新方法

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

我很确定不能在方法中使用LINQ作为参数,就像不能使用匿名类型一样。即使我在参数中的LINQ之前强制转换(测试)?对不起,我在foreach循环中的意思是:
if(Test.Name=Name)DoSomething(Test)如果只需要/expect 1个测试,那么调用
DoSomething((for….Single())
这与我已经在做的foreach循环没有太大区别。我希望直接使用linq作为参数。这与使用foreach循环没有什么不同?核查?你为什么要忽略这一点?在我看来,最好在调用私有方法之前进行验证,而不是在其中进行验证。是的,关于验证,你是对的……不应该忽略它。我只是对在参数中使用linq很确定。
this.DoSomething(
     (from x in tests 
      where x.Name = "What I need to pass" 
      select x).FirstOrDefault() as Test);