0
Entity Framework에서 일종의 재귀 LINQ를 지원합니까? 아니면 SQL에서 쿼리를 작성해야합니까? (ParentId 사용 - 일반적인 카테고리 하위 카테고리 문제)엔터티 프레임 워크 재귀 관계 계층 적 데이터
Entity Framework에서 일종의 재귀 LINQ를 지원합니까? 아니면 SQL에서 쿼리를 작성해야합니까? (ParentId 사용 - 일반적인 카테고리 하위 카테고리 문제)엔터티 프레임 워크 재귀 관계 계층 적 데이터
Include
확장 메소드 내에서 메소드를 사용하여 해결할 수 있다고 생각합니다. 계층 구조 만 가져 오거나 모두 가져올 수 있습니다. 심지어 꽤 추악한 SQL을 생성 할 수 있습니다.
using(var context = new HierarchyContext())
{
var depth = context
.Categories
.IncludeHierarchy(3, nameof(Category.Children));
var root = depth.Single(c => c.Id == 2);
}
public static IQueryable<T> IncludeHierarchy<T>(this IQueryable<T> source,
uint depth, string propertyName)
where T : Category
{
var temp = source;
for (var i = 1; i <= depth; i++)
{
var sb = new StringBuilder();
for (var j = 0; j < i; j++)
{
if (j > 0)
{
sb.Append(".");
}
sb.Append(propertyName);
}
var path = sb.ToString();
temp = temp.Include(path);
}
var result = temp;
return result;
}
public class Category
{
// Primary key
public int Id { get; set; }
// Category name
public string Name { get; set; }
// Foreign key relationship to parent category
public int ParentId { get; set; }
// Navigation property to parent category
public virtual Category Parent { get; set; }
// Navigation property to child categories
public virtual ICollection<Category> Children { get; set; }
}
정확히 달성하기를 원하십니까? 구체적으로하십시오. – cloudikka
@cloudikka 예를 들어 전체 계층 구조를 꺼내는 것과 같은 기본 작업 – john
(1) 그렇지 않습니다. 이것은 EF에 특화된 것이 아니지만 'Queryable'과 표현 트리 제한은 일반적으로 재귀 표현을 정의 할 방법이 아닙니다. (2) EF 탐색 속성 수정으로 인해 전체 계층 구조를 가져올 수 있습니다. 그러나 모든 자식으로 트리의 일부를 가져 오는 것은 하나의 L2E 쿼리로는 불가능합니다 (전체 3 개를로드 한 다음 메모리에 필터를 적용한 경우 제외). [LINQ에서 재귀 쿼리가 가능합니까?] (https://stackoverflow.com/questions/41894751/is-recursive-query-possible-in-linq/41909322#41909322) –