有没有办法逐步/有条件地将联接添加到查询中?我正在为客户创建一个自定义报告工具,并向客户提供他/她可以选择查询的对象列表。查询中始终会使用一个基础对象(“FWOBid”)。
因此,例如,如果客户选择对象“FWOBid”、“FWOItem”和“FWOSellingOption”,我想这样做:
var query = from fb in fwoBids
// if "FWOSellingOption", add this join
join so in sellingOptions on fb.Id equals so.BidId
// if "FWOItem", add this join
join i in fwoItems on fb.Id equals i.FWOBidSection.BidId
// select "FWOBid", "FWOItem", and "FWOSellingOption" (everything user has selected)
select new { FWOBid = fb, FWOSellingOption = so, FWOItem = i };
诀窍是客户可以选择大约 6 个彼此相关的对象,从而产生许多不同的连接组合。如果可能的话,我想避免对它们进行硬编码。
一种选择是结合左连接进行一些自定义连接。
一个像样的 TSQL 后端不应该因为始终使用所有连接而在性能方面出现任何缺陷,因为如果条件始终为 false,优化器只会删除连接。但这应该检查一下。
bool joinA = true;
bool joinB = false;
bool joinC = true;
var query = from fb in fwoBids
join so in sellingOptions on new { fb.Id, Select = true } equals new { Id = so.BidId, Select = joinA } into js
from so in js.DefaultIfEmpty()
join i in fwoItems on new { fb.Id, Select = true } equals new { Id = i.FWOBidSection.BidId, Select = joinB } into ji
from i in ji.DefaultIfEmpty()
join c in itemsC on new { fb.Id, Select = true } equals new { Id = c.BidId, Select = joinC }
select new
{
FWOBid = fb,
FWOSellingOption = so,
FWOItem = i,
ItemC = c
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)