LINQ中的条件谓词?

时间:2017-01-31 08:12:43

标签: c# entity-framework linq

有没有办法合并ifelse部分中的查询?

public List<MyClass> GetData(Category category, bool flag= true)
{
     IQueryable<MyClass> result;
     if (flag)
     {
        result =  Session.All<MyClass>()
                    .Where(mc => mc.Col.Equals(category.ToString()) && mc.FLAG);
     }
     else
     {
        result = Session.All<MyClass>()
                    .Where(mc => mc.Col.Equals(category.ToString()));
     }

     return result.ToList();
}

2 个答案:

答案 0 :(得分:25)

不确定

given_optimizer.compute_gradients(total_loss)
given_optimizer.apply_gradients(grads)

您可以通过制作允许result = Session.All<MyClass>() .Where(mc => mc.Col.Equals(category.ToString()) && (!flag || mc.FLAG)); 结果的矩阵来确定重写逻辑:

true

如果▼ mc.FLAG ► flag true false true valid valid false invalid valid 为假(两者都等于flag)或truemc.FLAG,则表示条件有效。

我还建议首先进行标记检查,因为这是性能更好的谓词。如果第一个结果为false,这可能会阻止第二次检查:

true

答案 1 :(得分:21)

您可以有条件地链接Where

public List<MyClass> GetData(Category category, bool flag = true)
{
    var result = Session.All<MyClass>()
        .Where(mc => mc.Col.Equals(category.ToString()));

    if (flag) {
        result = result.Where(mc => mc.FLAG);
    }

    return result.ToList();
}