我对格式化LINQ查询有疑问
我对同一查询使用不同的where选项
例如:
var result = context.table.Include(x => x.table2).Where(q => q1);
查询是相同的,但是在不同的情况下,我在q1,q2,q3之类的表达式上有不同
我可以分别配置q个对象并在查询中使用它吗
var q1 = (q => q.x == "something");
var q2 = (q => q.x == "something2");
var q3 = (q => q.x == "something3");
var qx;
if(x)
{
qx = q1;
}
if(y)
{
qx = q2;
}
var result = context.table.Include(x => x.table2).Where(q => qx);
答案 0 :(得分:0)
不完全是。您需要做类似的事情
var result = context.table.Include(x => x.table2).Where(qx);
因为q1
,q2
等已经与.Where()
期望的表达式兼容。
答案 1 :(得分:0)
IQueryable.Where
接受Expression<Func<TSource, bool>>
,您可以执行以下操作:
Expression<Func<SourceType, bool>> qx = q => false;
Expression<Func<SourceType, bool>> q1 = q => q.x == "something";
答案 2 :(得分:0)
在回答之前,请注意,您不能像这样声明qx
:
var qx;
因为编译器不会立即解析类型。 如果您指定q的类型,那么您要问的是可能的。
Func<type, bool> q1 = (type q) => q.x == "something";
Func<type, bool> q2 = (type q) => q.x == "something2";
Func<type, bool> q3 = (type q) => q.x == "something3";
Func<type, bool> qx = q3; //this needs a value (if x and y are false)
if(x)
{
qx = q1;
}
if(y)
{
qx = q2;
}
var result = context.table.Include(x => x.table2).Where(qx);
答案 3 :(得分:-1)
您似乎需要一个查询,其中在运行时提供了实际条件。只需使用Predicate
:
Predicate<MyType> predicate;
if(x)
{
predicate = q => q.x == "something";
}
else if(y)
{
predicate = q => q.x == "something2";
}
else
predicate = q => q.x == "something3";
var result = context.table.Include(x => x.table2).where(predicate);