我正在尝试使用 Entity Framework 5 运行以下 LINQ 查询:
int taskId = 2;
query = from a in Table_A
where a.StatusCode != "DONE"
&& a.Inbound
join b in Table_B
on a.Id equals b.Id_Table_A
join c in Table_C
on a.State equals (c.State ?? a.State)
where 2 == c.Id_Task
&& b.DataType == c.DataType
select a.Id;
导致我出现问题的行是:
on a.State equals (c.State ?? a.State)
Table_C中的“State”字段是可以为空的……当它为null时,用来表示“所有州”。因此,当“c.State”为空时,我希望匹配记录。如果我要用 SQL 编写此代码,我将使用以下内容:
JOIN Table_C ON Table_A.State = ISNULL(Table_C.State, Table_A.State)
不幸的是,我收到以下错误:
名称“a”不在“equals”右侧的范围内。考虑交换“等于”两边的表达式。
如果有人能告诉我实现这项工作的秘诀,我将不胜感激。
谢谢。
最佳答案
您可以像这样修改您的代码:
int taskId = 2;
query = from a in Table_A
where a.StatusCode != "DONE"
&& a.Inbound
join b in Table_B
on a.Id equals b.Id_Table_A
from c in Table_C
where 2 == c.Id_Task
&& b.DataType == c.DataType
&& (c.State == null || a.State.Equals(c.State))
select a.Id;
一个join
本质上是一个where
子句,所以这里由于join<的限制我们可以使用
.where
子句
关于c# - LINQ to Entities 加入可空字段,其中 Null 表示 "Match All",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14356384/