2017-12-29 70 views
-2

테이블은 데이터로드에 대한 정보를 유지합니다. 그것의 로딩은 내가 배치 (이것은 완벽한 이름이 아닐 수도 있음)로 바뀐 것입니다. 단계 및 집합은 이미 정의 된 메타 테이블이며 향후 해당 콘텐츠가 업데이트되지 않습니다 (적어도 오래된 것은 삭제되지 않습니다). 세트는 데이터 유형의 정의입니다 (예 : "this is that that is that that"). 여러 세트가 한발을 내딛습니다. 몇 가지 단계가 배치를 만듭니다. 집합이 여러 단계에 묶일 수 있으므로 집합을 다시 사용할 수 있습니다. 실제 (로드 된) 데이터는 다른 테이블에 저장되지만이 특정 작업에는 중요하지 않습니다. 중첩 된 컬렉션과 함께 복잡한 개체 넣기

I이 (간체) DB 구조가 있습니다

public class JoinedModel 
{ 
    public Batch Batch { get; set; } 
    public IEnumerable<Step> Steps { get; set; } 
} 

public class Step 
{ 
    public int StepId { get; set; } 
    public string Description { get; set; } 
    public IEnumerable<Set> Sets { get; set; } 
} 

public class Set 
{ 
    public int SetId { get; set; } 
    public string Type { get; set; } 
    public string EventCode { get; set; } 
} 
: enter image description here

(. 로그 테이블이 외래 키 제약 조건이없는)를 나는 이런 식으로 뭔가를 얻을 필요가있는

하나의 BatchStep 개체 컬렉션을 포함하는 방법 (각각은 적절한 Set 개체 컬렉션이 있습니다. 출력 집합 클래스에는 이벤트 코드가 있고, LogsEvents 테이블에서 얻은)?

여러 '시도한'시도, 조인, 그룹화하지만 해결 방법을 찾지 못했습니다. 한 문장에서 이런 식으로 만들 수 있습니까? 아니면 Batch을 별도로 선택해야합니까? 나머지는 취해야합니까? 그럼 어떻게?

DB 디자인을 변경할 수 없습니다. 다음

+1

" '복수를 시도 .....에서"나는 시도의 어떤 종류를 볼 수 없습니다. EF 솔루션을 원하십니까? 순수한 SQL? LinQ에서 SQL로? –

+0

태그와 마찬가지로 (충분하다고 생각하는) LINQ to SQL. 시도가 이루어졌지만 실제로는 아무 것도 의도 한대로 작동하지 않았고 질문에 추가 할 수있는 "도움이되는"대표자가 무엇인지 모릅니다. – Mars

+0

귀하의 모델이 논리적으로 합리적이지는 않습니다. 여러 세트가 한 단계 씩 나아 간다고 말하지만, 모델에서 여러 단계가 또한 세트를 만든다 (그리고 다 대다 관계는 매핑 테이블을 통해 기록된다)! 로그와 단계, 로그와 세트 사이에는 일대일 관계가 있습니다. 즉, 여러 세트가있는 단계가 없거나 여러 단계가없는 세트를 로그 테이블에 입력 할 수 있습니다. 저는 여러분이 드로잉 보드로 돌아 가야 할 수도 있습니다 - 또는 우리가 디자인에 대해 조언을 할 수 있도록 달성하고자하는 것에 대해 좀 더 구체화해야한다고 생각합니다. – Steve

답변

0

봅니다 :

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 


namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      List<Logs> logs = new List<Logs>(); 
      List<Step> steps = new List<Step>(); 
      List<Set> sets = new List<Set>(); 
      List<Batch> batches = new List<Batch>(); 
      List<Event> events = new List<Event>(); 


      int BatchId = 123; 

      var results = (from log in logs 
          join step in steps on log.Steps_StepId equals step.StepId 
          join set in sets on log.Sets_SetId equals set.SetId 
          join batch in batches on log.Batch_BatchId equals batch.BatchId 
          join _event in events on log.Events_EventId equals _event.EventId 
          select new { log = log, step = step, set = set, batch = batch, _event = _event }) 
          .Where(x => x.batch.BatchId == BatchId) 
          .Select(x => new { 
           description = x.batch.Description, 
           eventCode = x._event.Code, 
           date = x.log.Date, 
           stepId = x.step.StepId, 
           stepDescription = x.step.Description, 
           setType = x.set.SetId 
          }).ToList(); 


     } 

    } 
    public class Logs 
    { 
     public int Batch_BatchId { get; set; } 
     public int Steps_StepId { get; set; } 
     public int Sets_SetId { get; set; } 
     public DateTime Date { get; set; } 
     public int Events_EventId { get; set; } 

    } 
    public class JoinedModel 
    { 
     public Batch batch { get; set; } 
     public List<Step> Steps { get; set; } 
    } 

    public class Step 
    { 
     public int StepId { get; set; } 
     public string Description { get; set; } 
     public List<Set> Sets { get; set; } 
    } 

    public class Set 
    { 
     public int SetId { get; set; } 
     public string Type { get; set; } 
     public string EventCode { get; set; } 
    } 
    public class Batch 
    { 
     public int BatchId { get; set; } 
     public string Description { get; set; } 
    } 
    public class Event 
    { 
     public int EventId { get; set; } 
     public int Code { get; set; } 
    } 
}