【问题标题】:Calling a function inside of a lambda expression [duplicate]在 lambda 表达式中调用函数 [重复]
【发布时间】:2015-01-29 12:07:42
【问题描述】:

在 C# 中,是否可以在 lambda 表达式中调用函数?

比如下面是lambda表达式的一些内容:

(a => a.testBool && a.testBool2)

是否可以将以上内容写成一个函数,在lambda表达式内部调用该函数,得到同样的结果?

提前致谢。

编辑

在我原来的帖子中,我没有说明这是针对 dbSet。

我在测试对象(a)中创建了如下函数,如下:

public bool testBool()
{
    return true;
}

调用以下代码时:

(a => a.testBool()).ToList()

我收到此错误:

LINQ to Entities 无法识别方法“Boolean testBool()” 方法,并且该方法不能翻译成商店表达式。

【问题讨论】:

  • 当然你可以从 lamda 调用方法,lambdas 也是方法。它们没有什么特别之处。所以你可以用正常的方法做任何事情。
  • 你有没有试过把上面的内容写成一个函数,并在lambda里面调用这个函数?
  • 您是在使用 lambda 来创建委托,还是创建表达式树?如果您尝试创建委托,这很容易。如果您正在尝试创建表达式树,它仍然是可能的,但要复杂得多。

标签: c# function lambda


【解决方案1】:

当然,如果它是在 a 类中声明的函数。

public class a
{
    bool testBool()
    {
     ...
    }

    bool testBool2()
    {
     ...
    }
}

那么你可以这样做:

ListA.Where(a => a.testBool() && a.testBool2()).ToList();

【讨论】:

  • 确定这行得通吗?使用void 函数?
  • 你是对的,更正了答案;)
  • 那个方法需要返回一个布尔值;它应该是“Linq to objects”。不要尝试使用“Linq to SQL”
  • 您是否将“a”的投影实例(在 lambda 中)与“a”类混淆了。在您的示例中,您在哪里实例化 a?
  • @DaveBecker 我假设ListA 是已经包含项目的List<a> 的一个实例。这部分答案对我来说看起来不错。
猜你喜欢
  • 2017-06-27
  • 2018-09-11
  • 2012-09-27
  • 1970-01-01
  • 1970-01-01
  • 2013-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多