[英]How to combine two LINQ Expressions?
我在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);
此代碼有效,並為我提供了統計信息表中的年齡介於15至25之間的行。
現在,我想使行數從15到25,從40到50。
如何結合這兩個表達式?
謝謝
怎么樣...
Expression<Func<Stat, bool>> e1 = s =>
(s.Age >= 15 && s.Age < 25) || (s.Age >= 40 && s.Age < 50);
這有點丑陋,但如果要保留它們作為表達式:
stats = stats.Where(s => (e1.Compile()(s) || e2.Compile()(s))).ToList();
如果您可以將它們更改為Func
那么它會更清潔:
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();
你可以這樣做一個聯盟
stats = stats.Where(e1).Union(stats.Where(e2));
Expression<Func<Stat, bool>> GetOrExpression(
Expression<Func<Stat, bool>> e1,
Expression<Func<Stat, bool>> e2)
{
return s => e1.Compile()(s) || e2.Compile()(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(GetOrExpression(e1, e2));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.