gpt4 book ai didi

c# - 我可以在 linq 中克隆 IQueryable 吗?出于联合目的?

转载 作者:太空狗 更新时间:2023-10-29 19:40:09 25 4
gpt4 key购买 nike

我有一张 WorkOrders 表。该表有一个 PrimaryWorkerPrimaryPay 字段。它还有一个 SecondaryWorkerSecondaryPay 字段(可以是 null)。

我希望运行 2 个非常相似的查询并将它们合并,以便返回一个 Worker 字段和 Pay 字段。因此,如果单个 WorkOrder 记录同时填充了 PrimaryWorkerSecondaryWorker 字段,我将返回 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

现在我还有一个名为 hideZeroPay 的搜索标志。如果那是真的,如果 worker 的工资为 0 美元,我不想包括该记录。但显然,对于 1 个查询,我需要比较 PrimaryPay 字段,而在另一个查询中,我需要比较 SecondaryPay 字段。

所以我想知道如何做到这一点。

我能否克隆我的基本查询 q 并从中创建主要和次要工作人员查询,然后将这 2 个查询合并在一起?

最佳答案

嗯,我不确定我是否理解你的意图。但我认为克隆不是必需的。为什么不从基本查询中拆分出两个新查询?


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);

定义查询后,您可以解释它们(根据枚举)并检索不同的结果。


var res1 = query1.ToList();
var res2 = query2.ToList();

关于c# - 我可以在 linq 中克隆 IQueryable 吗?出于联合目的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3040778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com