[英]Always true if entity framework
我有简单的查询。 我想获取在其他表中没有对应行的行,或者如果它具有则SubField必须为false。
var list = ctx.Product.Where(p => p.Field == null || p.Field.SubField == false)
但是通过这个查询,如果p.Field为null,我总是得到所有行都没有关系。 即使我将第二个条件设置为p.Field.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
为null时, 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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.