use*_*867 9 c# linq entity-framework
我有一张桌子WorkOrders
.该表有一个PrimaryWorker
&PrimaryPay
字段.它还有一个SecondaryWorker
&SecondaryPay
field(可以null
).
我希望运行2个非常相似的查询并将它们联合起来,以便它返回一个Worker
Field&Pay
field.所以,如果一个WorkOrder
记录有两个PrimaryWorker
和SecondaryWorker
外地人口,我会得到2条记录回来.
这两个查询中的"where子句"部分非常相似且很长.这是一个虚拟的例子
var q = ctx.WorkOrder.Where(w => w.WorkDate >= StartDt && w.WorkDate <= EndDt);
if(showApprovedOnly)
{
q = q.Where(w => w.IsApproved);
}
//...more filters applied
Run Code Online (Sandbox Code Playgroud)
现在我也有一个名为的搜索标志hideZeroPay
.如果这是真的,我不想在工人支付0美元的情况下包括记录.但显然对于1个查询我需要比较该PrimaryPay
字段,而另一个我需要比较该SecondaryPay
字段.
所以我想知道如何做到这一点.
我可以克隆我的基本查询q
并从中进行主要和辅助工作者查询,然后将这两个查询合并在一起吗?
嗯,我不确定我是否理解你的意图。但是我认为克隆不是必需的。为什么不从基本查询中拆分两个新查询?
var baseQuery = ctx.WorkOrder.Where(w => w.WorkDate >= StartDt && w.WorkDate <= EndDt);
IQueryable<WorkOrder> query1;
if (showApprovedOnly)
{
query1 = baseQuery.Where(w => w.IsApproved);
}
//more filters on query1
...
IQueryable<WorkOrder> query2;
if (/*something*/)
query2 = baseQuery.Where(w => w.SomeThing);
Run Code Online (Sandbox Code Playgroud)
定义查询后,您可以解释它们(按枚举)并检索不同的结果。
var res1 = query1.ToList();
var res2 = query2.ToList();
Run Code Online (Sandbox Code Playgroud)