如何检查EF中的对象是否为空

时间:2016-04-27 08:00:39

标签: c# entity-framework linq

我是EF的新手并尝试用它做一个小项目。我给EF添加了一个条件,但我遇到了问题。 我的条件是关于IN的条件,如SQL, SELECT * FROM table1 WHERE col1 IN (1,2,3...)

这是我的EF ......

var res3 = res2.Where(l => !slitDetail
                        .Any(s => s.BlockId == l.Id 
                               && s.WarehouseDepot.WarehouseDepotName != "Ara Ürün Depo" 
                               && s.WarehouseDepot.WarehouseDepotName != "Özel Kesim Depo"));

s.WarehouseDepot有时可能为NULL,这是正常的,但如果为null,则此查询会抛出异常。

如何检查s.WarehouseDepot是否为空并使其工作即使它为空?

1 个答案:

答案 0 :(得分:1)

如果s.WarehouseDepot == null

,则有2种可能性

1)您希望Any返回true,在这种情况下,您可以使用类似

的内容
var res3 = res2.Where(l => !slitDetail
                        .Any(s => s.BlockId == l.Id
                               && s.WarehouseDepot != null
                                ? (s.WarehouseDepot.WarehouseDepotName != "Ara Ürün Depo" && s.WarehouseDepot.WarehouseDepotName != "Özel Kesim Depo") 
                                : true));

仅当s.WarehouseDepot有值时才使用Any,否则返回true

2)您希望false返回true。在这种情况下,您只需在上面的表达式中替换false var res3 = res2.Where(l => !slitDetail .Any(s => s.BlockId == l.Id && s.WarehouseDepot != null && s.WarehouseDepot.WarehouseDepotName != "Ara Ürün Depo" && s.WarehouseDepot.WarehouseDepotName != "Özel Kesim Depo")); 或使用类似

的内容
s.BlockId == l.Id

请注意,这两个结果都会自动考虑{{1}}条件。