【问题标题】:C# cannot equal '&' with entityframework dataC# 不能等于 '&' 与实体框架数据
【发布时间】:2014-04-01 13:00:31
【问题描述】:
public int getPartijId(string naam)
    {
        Partij partij = null;

        try
        {
            partij = repository.Partij.Single<Partij>(p => p.naam.Equals(naam));
        }
        catch (InvalidOperationException)
        {

        }

        return partij.partijID;
    }

我想通过将数据库中的名称与 linq 语句进行比较,从我们的数据库中获取某个值 (CD&V),但我得到的是一个空值……

对于其余的值,此方法有效,但我怀疑问题出在名称/字符串中的“&”

【问题讨论】:

  • 其实.Single&lt;T&gt;重载不能返回NULL。如果没有找到记录(或多条记录),if会抛出异常。
  • 你能说明你是如何调用这个方法的,尤其是你如何给参数naam一个值吗?
  • 什么是空? Partij 还是 Partij.PartijID?并向我们​​展示您比较的值,以及输入和记录的名称。
  • 删除正在吞噬异常的try/catch。它说什么? (Single 也会在有多个名为“CD&V”的“partijen”时失败)
  • 你可以试试partijID = partijmapper.getPartijId(@"CD&amp;V");(注意@),但至少去掉空的try-catch,这只会让你更难看到发生了什么。

标签: c# database linq entity-framework equals


【解决方案1】:

如果您的 Partij 存储库都是 partijen,也许可以试试

partij = repository.Partij.First(p => p.naam.Equals(naam));

【讨论】:

  • 它似乎不起作用,同样的错误。它是字符串中的'&'吗?或者这没有什么区别?
  • 你的repository.Partij中有Partij对象吗?
【解决方案2】:

据我所知,您的代码返回 null 的唯一方法是匹配对象上的 partijID 是否为 null。

其他选项抛出空引用异常

Partij partij = null;

try
{
    // this may throw an exception because there may be more or less than one item matching your predicate
    partij = repository.Partij.Single<Partij>(p => p.naam.Equals(naam));
}
catch (InvalidOperationException)
{
    // this is hiding that exception
}

// this will throw another null reference exception because the first call didn't actually set the partij variable
return partij.partijID;

附:捕获异常然后完全忽略它几乎不是一个好主意。

【讨论】:

    【解决方案3】:

    您的桌子是如何设计的? naam 字段是否有唯一的约束?您是否 100% 确定在 naam 字段中恰好有一行值为“CD&V”?我的猜测是你会返回多行然后吞下异常,所以 partij 保持为空。

    异常消息到底是什么?

    数据库中的partijID实际上是空的吗?

    【讨论】:

    • 问题解决了!在某种程度上,他在数据库中插入了值 CD&V 错误,所以当我们读取它时,它们的值是 CD&V\r\n ...我删除了该行并再次插入它,但现在已修复,所以谢谢大家你的帮助:)
    猜你喜欢
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 2011-11-14
    • 2022-01-01
    相关资源
    最近更新 更多