gpt4 book ai didi

c# - Nullable Field 和 SQL Is Null 问题

转载 作者:太空狗 更新时间:2023-10-29 21:40:10 25 4
gpt4 key购买 nike

stackoverflow 上有大量与我的问题相关的问答,但我无法推断出问题的原因以及在这种情况下最有效的解决方案;

所以我有一个方法允许您传递一个 parentID,并且基于该值的记录将使用 LINQ 查询进行过滤。数据库中的字段允许 NULL 值。现在,如果我在 where 子句中使用 == 运算符比较字段,则发出的 sql 是错误的(它不使用 IS NULL 进行比较),因此查询产生0 个结果。我使用 Object.Equals() 方法解决了这个问题。那行得通,但是现在我在传递一个非空值,一个整数时遇到异常

Unable to create a constant value of type 'System.Object'. Only primitive types or enumeration types are supported in this context.

所以我写了一个简单的方法

using (TestEntities context = new Entities())
{
return from c in context.ItemMappings
where c.ParentID.Equals(parentID)
select new ItemDTO
{
ItemID = c.Item.ItemID,
ItemName = c.Item.ItemName,
ItemType = new ItemTypeDTO
{
TypeID = c.Item.Type.TypeID,
TypeName =c.Item.Type.TypeName
};
}

最佳答案

是的,如果是 SQL,也会出现您的问题。您必须显式处理 null,这应该有效:

Where (parentID == null && c.ParentID == null) || (parentID == c.ParentID)

这假设您希望匹配一个空值。如果您希望 null 返回所有未过滤的结果,请执行以下操作:

Where (parentID == null) || (parentID == c.ParentID)

有时我什至在这方面遇到过麻烦,并且发现 LINQ 始终正确翻译的方式是:

Where (parentID == null) || (parentID != null && parentID == c.ParentID)

这是因为即使在 SQL 中,如果您执行 where ParentID = @ParentID,空匹配不会返回任何结果,您必须使用 ISNULL 将其转义为空白。

关于c# - Nullable Field 和 SQL Is Null 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15619272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com