如何检查延迟加载的集合属性的字段是否为空?



如何在.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()

相关内容

  • 没有找到相关文章

最新更新