C# EntityFrameworkQueryableExtensions.ThenInclude在EF Core中的使用
我试图定义一个通用的加载方法。 我使用如下表达式数组调用此通用加载方法:C# EntityFrameworkQueryableExtensions.ThenInclude在EF Core中的使用,c#,entity-framework,entity-framework-core,C#,Entity Framework,Entity Framework Core,我试图定义一个通用的加载方法。 我使用如下表达式数组调用此通用加载方法: var includes = new Expression<Func<CatalogItem, object>>[] { ci => ci.Catalog.Select(ci => ci.Supplier.Region), ci => ci.Test } foreach (var include in includes) {
var includes = new Expression<Func<CatalogItem, object>>[]
{
ci => ci.Catalog.Select(ci => ci.Supplier.Region),
ci => ci.Test
}
foreach (var include in includes)
{
queryable = queryable.Include(include);
}
MyGenericRepo.MySetInclude(new string[] {$"{nameof(ParentEntity.ChildEntity)}.{nameof(ChildEntity.GrandchildEntity)}"});
但这仅在表达式只有一个级别时有效。在多个级别中,它会抛出一个错误。
因为没有包含,所以我必须使用EntityFrameworkQueryableExtensions。我是这样试的
queryable = EntityFrameworkQueryableExtensions.ThenInclude(queryable, include);
但这也不起作用
我找不到有关此问题的任何文档。如何解决此问题以及如何使用EntityFrameworkQueryableExtensions。然后是Include?可以使用两个重载来获取字符串,而不是将表达式传递给Include方法 第一个属性采用单个属性或多级属性,如下所示:
Include("property1")
或
第二种方法利用了nameof方法,如下所示:
Include(nameof(property1), nameof(property2), nameof(property3))
如果您有一个通用加载方法,该方法使用字符串数组进行迭代,并以与当前迭代数组完全相同的方式包含,那么您可以使用第一个重载字符串并执行如下操作:
var includes = new Expression<Func<CatalogItem, object>>[]
{
ci => ci.Catalog.Select(ci => ci.Supplier.Region),
ci => ci.Test
}
foreach (var include in includes)
{
queryable = queryable.Include(include);
}
MyGenericRepo.MySetInclude(new string[] {$"{nameof(ParentEntity.ChildEntity)}.{nameof(ChildEntity.GrandchildEntity)}"});
因此,您仍然只使用one-Include方法,而不向存储库添加任何其他逻辑,但现在可以根据需要包含任意多个级别
要查看这些重载的起源,您可以查看它查看其中一些解决方案有错误,并且没有一个在通用设置下工作