作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
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/
我是一名优秀的程序员,十分优秀!