如何组合两个LINQ表达式?

ste*_*one 3 c# linq expression

我在c#中有以下LINQ查询

var stats = from s in context.Stats                                                                                                  
        select s;

Expression<Func<Stat, bool>> e1 = s => s.Age >= 15 && s.Age < 25;
Expression<Func<Stat, bool>> e2 = s => s.Age >= 40 && s.Age < 50;

stats = stats.Where(e1);
Run Code Online (Sandbox Code Playgroud)

此代码有效,并为我提供了Stats表中的行,其中Age介于15和25之间.

现在,我想得到15到25和40到50之间的行.

如何组合这两个表达式?

谢谢

Kev*_*lia 6

怎么样...

Expression<Func<Stat, bool>> e1 = s => 
   (s.Age >= 15 && s.Age < 25) || (s.Age >= 40 && s.Age < 50);
Run Code Online (Sandbox Code Playgroud)


D S*_*ley 5

这有点难看,但如果您想将它们保留为表达式:

stats = stats.Where(s => (e1.Compile()(s) || e2.Compile()(s))).ToList();
Run Code Online (Sandbox Code Playgroud)

如果您可以将它们更改为Funcs,则它会更干净:

Func<Stat, bool> e1 = s => s.Age >= 15 && s.Age < 25;
Func<Stat, bool> e2 = s => s.Age >= 40 && s.Age < 50;

stats = stats.Where(s => e1(s) || e2(s)).ToList();
Run Code Online (Sandbox Code Playgroud)