c# - 调用失败,参数为空

标签 c# linq entity-framework linq-to-entities

我有以下代码:

public static ContactEventValue GetContactEventValue(ContactEventType contactEventType, string programCode, string brandCode)
{
    AdvocacyEntities ent = AdvocacyEntities.GetReadOnlyInstance();
    ContactEventValue value = ent.ContactEventValues.SingleOrDefault(
        x => x.ContactEventTypeID == contactEventType.ContactEventTypeID
        && x.ProgramCode == programCode && x.BrandCode == brandCode);
}

当我用 brandCode 和 programCode 的值调用它时,我从数据库中得到了期望值。当我进行调用但显式将 x.ProgramCode 和 x.BrandCode 设置为 null 时,我从数据库中获取了预期的默认值:

ContactEventValue value = ent.ContactEventValues.Single(
        x => x.ContactEventTypeID == contactEventType.ContactEventTypeID
        && x.ProgramCode == null && x.BrandCode == null);

但是,当我为 programCode 和 brandCode 调用带有 null 的方法时,我从数据库中返回了 null!

我尝试根据这个问题的答案将 == 更改为 .Equals():Nullable optional parameter

所以 x.BrandCode.Equals(brandCode) 替换了 x.BrandCode == brandCode,x.ProgramCode.Equals(programCode) 替换了 x.ProgramCode == programCode,但仍然没有用。

我也试过使用 ??运算符(operator),仍然没有工作。

此问题表示未找到解决方案,他/她必须使用存储过程:EF 4 Query - Issue with Multiple Parameters我真的不想去那里。

有什么想法吗?

最佳答案

我不知道您使用的是哪个版本的 EF,但空值比较在版本 5 之前是一个问题。如果您检查实际发出的 SQL,您可能会看到 IS NULL 未在查询中使用。

在 EF 6 中,您将能够设置在 DbContext 上公开的 UseDatabaseNullSemantics 配置选项:

public class MyContext : DbContext
{
    public MyContext()
    {
        this.Configuration.UseDatabaseNullSemantics = true;
    }
}

对于 EF 5,您可以在基础 ObjectContext 上使用 UseCSharpNullComparisonBehavior 设置:

public class MyContext : DbContext
{
    public MyContext()
    {
        var objectContextAdapter = this as IObjectContextAdapter;
        objectContextAdapter.
            ObjectContext.ContextOptions.UseCSharpNullComparisonBehavior = true;    
    }
}

但是,您的项目需要使用 .NET Framework 4.5。如果您不想使用 4.5,则可以使用 How can i query for null values in entity framework? 中列出的解决方法之一。 .

关于c# - 调用失败,参数为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16309866/

相关文章:

c# - 使用 JavaScript 将参数传递给服务器方法

c# - 用linq减去两个表

linq - ASP.NET MVC 4 想要从数据库填充下拉列表

c# - 使用 Entity Framework 的代码优先在保存时抛出 DbUpdateException

c# - 调用azure函数Webhook的推荐方法

c# - 如果文件太大,则在Kendo Upload中返回正确的错误消息

c# - 在 csv 文件中使用字符串拆分和数组的 LINQ 问题

entity-framework - Entity Framework - LINQ - 在选择中使用表达式

php - 如何从现有数据库更新 Symfony 实体?

javascript - 使用 "WebMethod"调用 C# 方法返回 "undefined"