【发布时间】:2019-07-19 23:50:21
【问题描述】:
我正在使用 Entity Framework Core 2 和 Postgresql
当我的字段为空时,我尝试接受所有数据,例如粘贴的 sql db 查询;
select
"All"."Market",
alarms."CPersentage",
from "All
left JOIN "Alarms" as alarms
on "All"."Market" = coalesce(alarms."Buy", "All"."Market") //if alarms."Buy" = null then equaility became true!
但我无法在“ef core”上准备这种条件均衡,我尝试过这个;
var result =(from firstALL in Db.All
join alarm in Db.Alarms on
new
{
BUY = firstALL.Market,
Parity = firstALL.Parity
} equals new
{
BUY = alarm.Buy?? firstALL.Market, //Problem is here: The name 'firstALL' is not in scope on the right side of 'equals'
Parity = alarm.Parity?? firstALL.Parity
}
into alarmg
from alarmgi in alarmg.DefaultIfEmpty()
select new
{
BUY = firstALL.Market,
CPersentage = alarmgi.CPersentage
});
总结:当左连接参数为空、空时,我正在尝试使相等为真。
但错误是:名称“firstALL”不在“equals”右侧的范围内
【问题讨论】:
-
第一个查询中的 ** 令人惊讶地难以阅读。
-
与其考虑合并,不如考虑您的评论。你想检查
alarm?.Buy是null还是等于all.Market。 -
我正在使用像 ISNULL 函数一样的合并。 postgresqltutorial.com/postgresql-isnull 如果alarm.Buy =null 那么我想替换all.market value
-
您可以进行交叉连接
from firstAll in Db.All from alarm in Db.Alarms并将条件放入where。大多数现代数据库都足够聪明,可以创建一个执行正确连接的查询计划。 -
将
DefaultIfEmpty移到Where之后。
标签: c# linq lambda entity-framework-core