2017-12-29 72 views
-2

テーブルには、データの読み込みに関する情報が保持されます。その読み込みはバッチに変更されたものです(完全な名前ではないかもしれません)。ステップとセットは、すでに定義されているメタテーブルであり、将来そのコンテンツが更新されない可能性があります(少なくとも古いものは削除されません)。セットとは、データのタイプの定義です。たとえば、「これまたはそれに合わせたCSVファイル」です。いくつかのセットが足を引っ張ります。いくつかのステップでバッチを作成します。セットを複数のステップに結び付けることができるので、セットを再利用することができます。実際の(ロードされた)データは他のテーブルに格納されますが、この特定のタスクでは重要ではありません。 ネストされたコレクションを持つ複雑なオブジェクトをまとめる

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

(。ログテーブルが外部キー制約を持っていませんが)、私はこのような何かを取得する必要があり、そこから

Stepオブジェクトのコレクションを1つのBatchに追加する方法。それぞれに適切なSetオブジェクトのコレクションがあります(出力セットクラスにはイベントコードがあります。 LogsおよびEventsテーブルから得られる)?

複数の「from」を試してみましたが、グループ化していますが、解決策を見つけ出すのには良いことではありません。 1つの明細書からこのようなことを行うことは可能ですか、それともBatchを別に選択してから残りを取る必要がありますか?どのように?

DBデザインは変更できません。

+1

私は試みのいずれかの種類が表示されていない「.....からしようとしました複数の」」。 EFソリューションが必要ですか?純粋なSQL? LinQからSQLへ? –

+0

タグで(それが十分だと思った)、LINQ to SQL。試行錯誤が行われましたが、実際には何も意図どおりに動かず、質問に追加するのが「助けて」代理人になるかどうかわかりません。 – Mars

+0

あなたのモデルが理にかなっているかどうかはわかりません。いくつかのセットが一歩前進すると言いますが、あなたのモデルではいくつかのステップもセットになります(そして多対多の関係はマッピングテーブルで記録されます)!また、ログとステップの間には1対1の関係があり、ログとセットの間にも存在します。つまり、複数のセットを持つステップがないか、複数のステップを持つセットがログ・テーブルに入力できません。私はあなたが描画ボードに戻る必要があるかもしれないと思う - またはあなたが達成しようとしているものについてもう少し具体的なので、私たちはデザインに助言することができます。 – 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; } 
    } 
} 
関連する問題