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之间的行.
如何组合这两个表达式?
谢谢
怎么样...
Expression<Func<Stat, bool>> e1 = s =>
(s.Age >= 15 && s.Age < 25) || (s.Age >= 40 && s.Age < 50);
Run Code Online (Sandbox Code Playgroud)
这有点难看,但如果您想将它们保留为表达式:
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)