0

以下では、model.Status と model.Source の値が null の場合とそうでない場合があります。null の場合、式ですべてのステータス/ソースを取得します。以下のステートメントが機能しないため、これはラムダで可能ですか?

var leads = db.CallCenterLead.Include("Profile").Include("Account")
.Where(x => x.DateSent >= model.DateFrom && x.DateSent <= model.DateTo 
&& ((model.Status != null && x.Status == model.Status) || (model.Status == null)) 
&& (model.Source != null && x.Source == model.Source)).OrderByDescending(x => x.DateSent).ToList();
4

1 に答える 1

0

これを行う 1 つの方法は、次のような拡張メソッドを使用することです。

var leads = db.CallCenterLead.Include("Profile").Include("Account")
    .Where(x => x.DateSent >= model.DateFrom && x.DateSent <= model.DateTo)
    .WhereIf(model.Status != null, x.Status == model.Status)
    .WhereIf(model.Source != null, x.Source == model.Source)
    .OrderByDescending(x => x.DateSent).ToList();

拡張方法:

public static IQueryable<TSource> WhereIf<TSource>(this IQueryable<TSource> source, bool condition, Expression<Func<TSource, bool>> predicate)
{
    return condition ? source.Where(predicate) : source;
}

条件が true の場合、メソッドは述語を追加します。それ以外の場合は、ソースをそのまま返します。

于 2012-07-25T14:04:52.283 に答える