实体框架总是为真
本文关键字:框架 实体 | 更新日期: 2023-09-27 17:52:40
我有一个简单的查询。我想获得的行在其他表中没有对应的行,或者如果有,那么SubField必须为false。
var list = ctx.Product.Where(p => p.Field == null || p.Field.SubField == false)
但是使用这个查询,我总是得到所有行,如果p. field为null无关紧要。即使我把第二个条件设为p字段。SubField== true我也得到所有行
我创建了简单的MessageBoxes来查看结果:
MessageBox.Show((c.Field== null).ToString());
result = true;
MessageBox.Show((c.Field.SubField == false).ToString());
result = object is not set exception
MessageBox.Show((c.Field == null || c.Field.SubField == false).ToString());
result = true;
我做错了什么?
这是一个c#简化查询的例子。当p.Field == null
求值为true
时,试图查看第二部分是没有意义的,因为它是or
表达式的一部分。考虑代码的这种变体,注意当Field
为空时,Console.WriteLine
不会执行:
设置:
public class Product
{
public Field Field { get; set; }
}
public class Field
{
public bool SubField { get; set; }
}
private bool GetSubField(Product product)
{
Console.WriteLine("GetSubField");
return product.Field.SubField;
}
执行示例:
var products = new List<Product>
{
new Product { Field = null }
};
var list = products.Where(p => p.Field == null || GetSubField(p) == false);