C# Lambda表达式中的Case

C# Lambda表达式中的Case,c#,lambda,case,C#,Lambda,Case,我编写了一个方法,它调用一个返回linq查询的方法。 在这个方法中,我需要将一个case表达式应用于从我调用的方法接收的linq查询。我想也许使用lambda表达式可以应用case表达式,但我如何才能做到这一点?好的,您可以使用语句体lambda表达式: Func<int,string> x = value => { switch(value) { case 0: return "hello"; case 1: return "t

我编写了一个方法,它调用一个返回linq查询的方法。
在这个方法中,我需要将一个case表达式应用于从我调用的方法接收的linq查询。我想也许使用lambda表达式可以应用case表达式,但我如何才能做到这一点?

好的,您可以使用语句体lambda表达式:

Func<int,string> x = value =>
{
    switch(value)
    {
        case 0: return "hello";
        case 1: return "there";
        default: return "other";
    }
};
Func x=value=>
{
开关(值)
{
案例0:返回“你好”;
案例1:返回“那里”;
默认值:返回“其他”;
}
};
但是,您将无法将其转换为表达式树,因为它们只支持带有单个表达式的lambda表达式。您正在尝试在这里使用LINQtoSQL吗

当然,您可以使用嵌套条件,这应该适用于表达式树:

Expression<Func<int,string>> x = value =>
    value == 0 ? "hello"
    : value == 1 ? "there"
    : "other";
表达式x=value=>
值==0?“你好”
:值==1?“那里”
:“其他”;

这是一种开关/机箱。。。虽然效率不太高,但它可能对您来说已经足够好了。

您可以使用三元语句

[boolean expression] ? [result if true] : [result if false]

你能用一个普通的旧函数代替lambda来完成这个任务吗

X.Select( GetY );

or

X.Select( x => GetY(x) );

or

from x in X
select new
{
   y = GetY(x)
};


我试着那样做,但只有一个例外。var c=q.Where(e=>e.Status.Value==6?e.Status.Value=0:e.Status.Value)@哈拉根:“只有一个例外”并不是非常详细。请在问题中提供尽可能多的信息。如果您尝试了某项操作但收到异常,请告诉我们所有相关信息。同样地,如果你说你开始使用LINQtoSQL,也会有所帮助。对不起,我今天过得不好,有点心烦意乱。在主题中,当尝试从bool类型转换为int类型时,我得到一个System.InvalidOperation异常。我想知道这是否是因为e.Status是可空的。是的,我在这里尝试使用LINQ to SQL。其中一个要求是速度。我正在处理的应用程序在几乎所有任务中都相当快,如果你知道我的意思,我不能降低质量。@Hallaghan:它在C#中效率不高,但它可以毫无问题地转换为适当的SQL。我会先找到一些有效的方法,然后再担心效率。
private YType GetY( XType x )
{
    switch( x )
    {
       ...
    }
}