dev*_*ull 19 c# linq entity-framework
有没有办法将查询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();
}
Run Code Online (Sandbox Code Playgroud)
Pat*_*man 25
当然.
result = Session.All<MyClass>()
.Where(mc => mc.Col.Equals(category.ToString()) && (!flag || mc.FLAG));
Run Code Online (Sandbox Code Playgroud)
您可以通过创建允许true结果矩阵来确定重写逻辑:
? mc.FLAG ? flag
true false
true valid valid
false invalid valid
Run Code Online (Sandbox Code Playgroud)
在这里,你看到的情况是有效的,如果flag是假的(两者等同于true)或mc.FLAG为true.
我还建议先进行标记检查,因为这是性能更好的谓词.如果第一个结果为false,这可能会阻止第二次检查:
result = Session.All<MyClass>()
.Where(mc => (!flag || mc.FLAG) && mc.Col.Equals(category.ToString());
Run Code Online (Sandbox Code Playgroud)
小智 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();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2261 次 |
| 最近记录: |