簡體   English   中英

如何合並兩個LINQ表達式?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM