2016-06-01 6 views
-1

Lets sagen, ich habe Tabellenalle Zeilen angezeigt Linq mit

Shape 
Id  ShapeName 
1  Circle 
2  Square 
3  Triangle 
4  Pentagon 

ShapeColour 
Id  ShapeId Colour 
1  1   Red 
2  1   Yellow 
3  2   Green 
4  3   Blue 
5  3   Orange 

In Entity Framework ich für diese Form eine Form Objekt mit ShapeColours Liste als Eigenschaft haben würde, aber was ich will, ist eine abgeflachte Liste, als ob ich wurde mit sql

DesiredObject 
ShapeId ShapeColourId ShapeName Colour 
1  1    Circle Red 
1  2    Circle Yellow 
2  3    Square Green 
3  4    Triangle Blue 
3  5    Triangle Orange 
4  null   Pentagon null 

Hope mein Beispiel ist genug genug.

+0

Haben Sie etwas versucht? Können Sie den Code anzeigen? –

+1

Dies zeigt nicht viel Forschung. Wenn Sie wissen, wie man das in SQL macht, haben Sie versucht, zu suchen, wie man das mit EF macht? Es sieht für mich wie eine einfache Projektion aus. –

+1

Ihre Kommentare sind völlig gerechtfertigt und ärgerlicherweise hatte ich einen "blonden" Moment. Die Antworten sind Dinge, die ich bereits kenne, die Arbeit machen und ich war ein Idiot, um zu vergessen. Danke euch allen und in Zukunft wird meine Frage mehr Details zeigen. –

Antwort

1

Sie können eine doppelte from so tun;

var query= from s in context.Shapes 
      from sc in s.ShapeColours.DefaultIfEmpty() 
      select new {ShapeId=s.Id, 
         ShapeColourId=sc.Id, 
         ShapeName=s.Name, 
         Colour=sc.Colour 
         }; 
1

Ohne Ihre genaue Einheiten zu sehen ich Ihnen raten möchte so etwas wie dieses

var results = from shape in db.Shapes 
       from colour in shape.ShapeColours.DefaultIfEmpty() 
       select new 
       { 
        shape.ShapeId, 
        colour.ShapeColourId, 
        shape.ShapeName, 
        colour.Colour 
       }; 

Mit EF können Sie die Navigationseigenschaften für Tabellen verwenden, die über einen Fremdschlüssel verbunden sind. Um einen Link-Join zu erstellen, müssen Sie nur DefaultIfEmpty() für die Navigationseigenschaftensammlung verwenden.

+0

war nicht sicher wer zuerst war und Ihre Antworten waren im Grunde die gleichen. Als @oct war der erste in der Liste Ich hatte ihn als die richtige Antwort, aber ich möchte Ihnen auch für Ihre Hilfe danken. –

+0

@RobWhite Obwohl Sie nur eine Antwort akzeptieren können, können Sie so viele aufladen wie Sie möchten :) –