繁体   English   中英

如果实体框架始终为真

[英]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 == nulltrue ,尝试查看第二部分是没有意义的,因为它是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM