c# - LINQ to Entities 加入可空字段,其中 Null 表示 "Match All"

标签 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;

导致我出现问题的行是:

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/

相关文章:

c# - 表达式树是 C# 的核心语言功能吗?

c# - 更改 Chart Winforms 上的轴值

c# - 使用 Top X 在 LINQ 中编写子查询

c# - EF 的 ExecuteSqlCommand 总是返回 -1

c# - ASP.NET MVC,添加 View : No model classes in dropdownlist

c# - 在 WPF 的数据网格列中写入状态

c# - C#如何改变文本框的字体颜色?

c# - 继承 Linq to SQL 类并转换 linq 查询的结果

asp.net - LINQ 中的匿名类型成员声明符无效

c# - 为什么 Entity Framework Code-First(使用现有数据库)一直尝试从 EdmMetadata 表中获取数据?