我有以下条件,它执行两个查询之一,这些查询仅由附加子句不同
&& acc.Fb_DataSourceKey == dskId
这是有条件的
var statData = dskId != -1 ? from s in dao.fb_statdata
join acc in dao.fb_datasourceadaccount
on s.Fb_DataSourceAdAccountId equals acc.Id
where s.ReportTypeId == 1
&& acc.Fb_DataSourceKey == dskId
group new { s, acc.Fb_DataSourceKey } by new { s.Fb_DataSourceAdAccountId, s.Start_time } into res
select res
:
from s in dao.fb_statdata
join acc in dao.fb_datasourceadaccount
on s.Fb_DataSourceAdAccountId equals acc.Id
where s.ReportTypeId == 1
group new { s, acc.Fb_DataSourceKey } by new { s.Fb_DataSourceAdAccountId, s.Start_time } into res
select res;
现在,感谢https://stackoverflow.com/a/2850048/1170932我知道我可以将其更改为以下
var statData = from s in dao.fb_statdata
join acc in dao.fb_datasourceadaccount
on s.Fb_DataSourceAdAccountId equals acc.Id
where s.ReportTypeId == 1
group new { s, acc.Fb_DataSourceKey } by new { s.Fb_DataSourceAdAccountId, s.Start_time } into res
select res;
if (singleDsk)
statData = from s in statData where s.Key.Fb_DataSourceAdAccountId == dskId select s;
这消除了代码重复,但会导致使用非常低效的外连接(可以理解,真的)。FTR 我们使用 MySQL 作为我们的数据库。
不幸的是,外部连接速度慢得令人无法接受。有没有办法在不生成外连接且不复制代码的情况下执行查询式条件?