[SQL] 어떻게 말끔를 사용하여 효율적으로 집계 개체를 선택합니까?
SQL어떻게 말끔를 사용하여 효율적으로 집계 개체를 선택합니까?
내가 집계를 형성하는 일련의 객체가 있다고 가정하자.
public class C{
public string Details {get;set;}
}
public class B{
public string Details {get;set;}
public List<C> Items {get;set;}
}
public class A{
public long ID {get;set;}
public string Details {get;set;}
public List<B> Items {get;set;}
}
말끔를 사용하여, 어떤 데이터베이스에 테이블에서 다음을 채울 수있는 가장 좋은 방법입니다 (내 경우에 그것의 포스트 그레스을하지만 그건 문제가 안). 이 예에서 테이블 개체 모델에 하나 거의 하나입니다. 각 하위 개체에 대한 외래 키 관계를 나타내는 클래스의 Items 속성. 즉, 표 3, A가 B와 많은 관계 하나를 가지고, B는 C. 가진 많은 관계 하나를 가지고
그래서 A I의 특정 ID에 대한 내 객체가 아니라 모든 하위 데이터를 갖고 싶어.
내 추측은 어떻게 든 QueryMultiple를 사용해야하지만, 나는 확실히 그것을 할 수있는 최선의 방법 아니다는 것이다.
해결법
-
==============================
1.멀티 매퍼 객체 계층 구조를 만들기 위해 도움이 될 수 있습니다 : 내가 여기 제안 도우미가 생각합니다.
멀티 매퍼 객체 계층 구조를 만들기 위해 도움이 될 수 있습니다 : 내가 여기 제안 도우미가 생각합니다.
var mapped = cnn.QueryMultiple(sql) .Map<A,B,A> ( A => A.ID, B => B.AID, a, bees => { A.Items = bees}; );
당신이 매퍼와 GridReader 및 확장 가정 :
public static IEnumerable<TFirst> Map<TFirst, TSecond, TKey> ( this GridReader reader, Func<TFirst, TKey> firstKey, Func<TSecond, TKey> secondKey, Action<TFirst, IEnumerable<TSecond>> addChildren ) { var first = reader.Read<TFirst>().ToList(); var childMap = reader .Read<TSecond>() .GroupBy(s => secondKey(s)) .ToDictionary(g => g.Key, g => g.AsEnumerable()); foreach (var item in first) { IEnumerable<TSecond> children; if(childMap.TryGetValue(firstKey(item), out children)) { addChildren(item,children); } } return first; }
당신은 3 계층 구조로 작업이 패턴을 확장 할 수 있습니다.
from https://stackoverflow.com/questions/6146918/how-do-i-select-an-aggregate-object-efficiently-using-dapper by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 서버 커서에서 여러 값을 가져옵니다 (0) | 2020.06.22 |
---|---|
[SQL] 어떻게 INFORMATION_SCHEMA를 사용하여 기본 제약 조건을 찾을 수 있습니까? (0) | 2020.06.22 |
[SQL] 협회를 통해 쿼리는 가장 최근의 기록으로 제한 난간? (0) | 2020.06.22 |
[SQL] 각 행에 대해 MySQL을 자동 저장 날짜 (0) | 2020.06.22 |
[SQL] ALL DATETIME ISO 8601 (0) | 2020.06.22 |