如何在.NET实体框架中检查延迟加载的集合字段的object属性是否为null?我在想类似的东西
context.Products.Include(product => product.SubProduct).Where(subProduct => subProduct.Price !- null).Where(product => keys.Contains(product.ProductId))
我怎样才能做到这一点?
我认为您的示例可能有点问题。
假设价格是一个对象引用,而不是一个空值:如果你想要所有适用的产品,但只包括分配了价格的子产品:
var products = context.Products
.Include(product => product.SubProduct
.Where(subProduct => subProduct.Price != null)
.Where(product => keys.Contains(product.ProductId))
.ToList();
如果你想要所有包含SobProduct的产品,价格为:
var products = context.Products
.Include(product => product.SubProduct)
.Where(product => keys.Contains(product.ProductId)
&& product.SubProduct.Any(subProduct => subProduct.Price != null))
.ToList();
这两种情况都是急于加载子产品,而不是懒惰加载。第一个示例使用过滤后的Include()
来只加载有价格的子产品。第二个示例将急切地加载所有子产品,但只返回与密钥匹配的产品,并且至少有一个子产品具有价格。
如果您有一个实体,并且在跟踪它的DbContext的范围内,则可以使用.Reference()
或.Collection()
检查相关引用或集合是否已被热切加载或延迟加载(而不会触发延迟加载(。
例如,如果我加载了一个产品,并想检查是否加载了子产品(集合(:
var isLoaded = context.Entry(product).Collection(x => x.SubProduct).IsLoaded;
如果引用是奇异对象引用,请将.Collection()
替换为.Reference()
。