use*_*867 9 c# linq entity-framework
我有一张桌子WorkOrders.该表有一个PrimaryWorker&PrimaryPay字段.它还有一个SecondaryWorker&SecondaryPayfield(可以null).
我希望运行2个非常相似的查询并将它们联合起来,以便它返回一个WorkerField&Payfield.所以,如果一个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)
| 归档时间: |
|
| 查看次数: |
5118 次 |
| 最近记录: |