LINQ to Entities加入Nullable字段,Null意味着"全部匹配"

Rob*_*b G 8 c# linq entity-framework

我试图使用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;
Run Code Online (Sandbox Code Playgroud)

导致我问题的一条线是:

on a.State equals (c.State ?? a.State)
Run Code Online (Sandbox Code Playgroud)

Table_C中的"State"字段是可空的......当它为null时,它用于暗示"所有状态".因此,当"c.State"为null时,我希望记录匹配.如果我在SQL中写这个,我会使用以下内容:

JOIN Table_C ON Table_A.State = ISNULL(Table_C.State, Table_A.State)
Run Code Online (Sandbox Code Playgroud)

不幸的是,我收到以下错误:

名称'a'不在'equals'右侧的范围内.考虑交换'equals'两侧的表达式.

我将感激任何能让我了解这项工作秘诀的人.

谢谢.

Rob*_*b G 3

我设法通过将“DataType”检查从 WHERE 移至 JOIN,并将“State”检查从 JOIN 移至 WHERE 来实现此目的。按照我的预期工作的结果代码如下:

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 b.DataType equals c.DataType
        where 2 == c.Id_Task
            && (c.State ?? a.State) == a.State
        select a.Id;
Run Code Online (Sandbox Code Playgroud)

非常感谢所有为我看过这篇文章的人。:)