2012-11-22 9 views
1

필요한 항목 만 얻으려면 정확한 where 절을 찾을 수 없습니다.엔티티 프레임 워크의 복잡한 그래프

본인은 Divisions가 있으며, 여기에는 Category를 포함하며 여기에는 Items가 포함됩니다. 이이 클래스입니다 :

public class Division { 
     public string Description { get; set; } 

     public List<Category> Categories { get; set; } 
    } 

public class Category : IdEntity 
{ 
    public string Description { get; set; } 

    public Guid DivisionId { get; set; } 

    public List<Item> Items { get; set; } 
} 

public class Item 
{ 
    public Guid CategoryId { get; set; } 

    public DateTime Date { get; set; } 

    public string Description { get; set; } 
} 

는 내가 필요로하는 매개 변수의 ID로 분할하고,이 모든 부문에서 범주와 각 범주에 대한 특정 날짜를 항목.

그래서 지금은 이렇게 :

public Division GetFullDivisionByIdAndDate(Guid id, DateTime date) 
    { 
     using (new ChangeTrackingScope(ChangeTracking.Disabled)) 
     { 
      var divisionGraph = new Graph<Division>().Include(d => d.Categories.Select(c => c.Items)); 
      var division = _divisionDL.GetFullDivisionByIdAndDate(id, divisionGraph, date); 
      return division; 
     } 
    } 

그리고 DL에 내가 여기

 public Division GetFullDivisionByIdAndDate(Guid id, Graph<Division> graph, DateTime date) 
    { 
     using (var db = new ContextScope<DatabaseContext>()) 
     { 
      var q = graph.ApplySetReferences(db.Context.Divisions).AsNoTracking(); 
      return q.SingleOrDefault(p => p.Id == id); 
     } 
    } 

을 나는 (지금까지 너무 좋아) 모든 범주 분할을 얻을 것보다

뿐만 아니라 I 모든 항목을 가져오고 매개 변수로 지정된 날짜의 항목 만 필요합니다. 누구든지이 작업을 수행하는 방법을 알고 있습니까?

답변

1

약간의 누락 된 메소드 (Graph, ApplySetReferences)로 인해 코드에 액세스 할 수 없으므로 코드를 액세스 할 수 없습니다. 그러나 탐색 속성을 사용하여 객체 그래프를 쿼리하는 일반적인 방법을 보여줄 수 있습니다. 당신이 모델에서 기본 쿼리 본체는 다음과 같이 수 :

from d in Divisions 
from c in d.Categories 
from i in c.Items 
select new { Div = d.Description, Cat = c.Description, Item = i.Description } 

from d in Divisions.Where(div => div.Id == id) 
from c in d.Categories 
from i in c.Items.Where(item => item.Date == date) 
select new { ... } 

같은 다른 필터와 속성을 추가 할 수 있습니다 또는 당신은 필터링 된 항목과 결과를 원하는 경우 여기에서 시작 소식 모음 :

from d in Divisions.Where(div => div.Id == id) 
from c in d.Categories 
select new new { Div = d.Description, 
       Cat = c.Description, 
       Items = c.Items.Where(item => item.Date == date) 
       } 
관련 문제