2011-07-07 8 views
2

を引き起こして参加し、私のクエリの抽出物である:DefaultIfEmptyはここで重複

... 
join p in dc.PODs on c.ID equals p.Consignment into pg 
from pgg in pg.DefaultIfEmpty() 
... 

クエリが何をすべき委託に関連したすべての「ポッドは」IEnumerableをとしてそれを保存しますされますオブジェクト(これは動作するようです)ので、私はそれを介してクエリから生成されたメインのIEnumerableを照会することができます。

問題は、行に複数のPODがある場合にのみ発生するDefaultIfEmpty行と重複するメイン行が表示されているため、各PODの行が正しくないためです。私がpg.DefaultIfEmpty()行を取り出した場合、は少し良く機能するようにはと思われますが、PODなしで行を取得したいと考えています。

どのようなアイデアですか?

+0

を持っている場合は、完全なクエリを表示することができ、共有を行います。 – msarchet

+0

申し訳ありませんが、現時点で私はインターネットにアクセスできないマシンで作業しています。私は5分持っているときにタイプアップします:) – Chris

+0

インターネットにアクセスできない? 2番目を管理しないだろう –

答えて

0

あなたの質問の抜粋にデータの完全な構造や最初のfromまたは最後のselect句が表示されないため、私があなたの意思を表明できない場合は、私には寛容です。だから私はあなたのスニペットとサンプルデータに基づいて解決策だと思うものを投稿しています。私がオフになっている場合は私に教えてください、私はそれを修正します。あなたは、独自のライン上のPODにそれぞれ委託してのPODへの委託の行のリストを、必要な場合

は、あなたがこのような何か行うことができます(心に留めておくと、私のfromselect句私のサンプルデータに基づいています):

 // select the consignment id & name (i made up) and each matching POD 
     var results = from c in consignments 
         join p in dc.PODs on c.ID equals p.Consignment into pg 
         from pgg in pg.DefaultIfEmpty() 
         select new { ID = c.ID, Name = c.Name, POD = pgg }; 

     // This is just a SAMPLE display just for kicks and grins 
     foreach (var r in results) 
     { 
      Console.WriteLine(r.Name + " " + ((r.POD != null) 
               ? (r.POD.Consignment + " " + r.POD.Description) 
               : "none")); 
     } 

このクエリのようなものを出力:私はあなたの発言を理解し、非常にわからないんだけど、しかし

One 1 TextBox 
Two none 
Three 3 Refridgerator 
Three 3 Bucket 
Four none 
Five none 

を:

あなたはどこ各結果の行ごとの購入につき1つの委託を表示したくないと言っている場合

を「問題は、私は 重複主要行を取得していますされて」私はわからないんだけど

 // select the Consignment ID and Name (i made up), and list of PODs 
     // instead of the individual POD 
     var results = from c in consignments 
         join p in dc.PODs on c.ID equals p.Consignment into pg 
         select new { ID = c.ID, Name = c.Name, PODs = pg }; 

     // This is just a SAMPLE display just for kicks and grins 
     foreach (var r in results) 
     { 
      Console.WriteLine(r.Name + " "); 

      if (r.PODs.Count() > 0) 
      { 
       foreach (var pod in r.PODs) 
       { 
        Console.WriteLine("\t" + pod.Consignment + " " + pod.Description); 
       } 
      } 
      else 
      { 
       Console.WriteLine("\tNone"); 
      } 
     } 
選択は、PODリストの代わりに、次のように出力し、個々の試合、選択され

IEnumerableが委託とのPODの配列との項目で、次のようなクエリをしたいと思います
One 
     1 TextBox 
    Two 
     None 
    Three 
     3 Refridgerator 
     3 Bucket 
    Four 
     None 
    Five 
     None 
1

あなたの2番目のケースを確認したいだけですが、2番目、4番目、5番目のアイテムがないアウトプット・ジョイントではないため、アウトプットにはアイテムがありませんか? One 1 TextBox Three 3 Refridgerator 3 Bucket

私が試みたのは、dc.PODSと同等のWHERE INを使用したことでした。 ​​

あなたが他のアイデア

関連する問題