C# LINQ中的条件谓词?

C# LINQ中的条件谓词?,c#,entity-framework,linq,C#,Entity Framework,Linq,是否有方法将if和else部分中的查询组合在一起 public List<MyClass> GetData(Category category, bool flag= true) { IQueryable<MyClass> result; if (flag) { result = Session.All<MyClass>() .Where(mc => mc.Col.E

是否有方法将
if
else
部分中的查询组合在一起

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();
}
public List GetData(类别,bool标志=true)
{
可预测的结果;
国际单项体育联合会(旗)
{
结果=Session.All()
其中(mc=>mc.Col.Equals(category.ToString())&&mc.FLAG);
}
其他的
{
结果=Session.All()
其中(mc=>mc.Col.Equals(category.ToString());
}
返回result.ToList();
}
当然可以

result =  Session.All<MyClass>()
                 .Where(mc => mc.Col.Equals(category.ToString()) && (!flag || mc.FLAG));
这里您可以看到,如果
标志
为false(两者都等于
)或
mc,则条件有效。标志

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

result =  Session.All<MyClass>()
                 .Where(mc => (!flag || mc.FLAG) && mc.Col.Equals(category.ToString());
result=Session.All()
其中(mc=>(!flag | mc.flag)&&mc.Col.Equals(category.ToString());

您可以有条件地将
链接到其中

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();
}
public List GetData(类别,bool标志=true)
{
var result=Session.All()
其中(mc=>mc.Col.Equals(category.ToString());
国际单项体育联合会(旗){
结果=结果,其中(mc=>mc.FLAG);
}
返回result.ToList();
}

太好了。谢谢!@devnull不客气。现在包含了此操作的逻辑。在查找正确的unicode字符时遇到了一些困难:)我知道这回答了问题。好奇的是,考虑到可读性和(边际)性能,您是否更喜欢这段代码而不是OP中的代码?这段代码的意图没有原始代码那么清晰。它更紧张,但你需要一个真值表。OP:不要这样做。我不认为这件事有多复杂@nathan。这是很清楚的。真值表只是解释如何分析这一点。
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();
}