使用linq显示所有行

时间:2016-06-01 14:27:53

标签: c# sql-server linq

让我说我有桌子

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

在实体框架中,我有一个ShapeColours列表的形状对象作为该形状的属性,但我想要的是一个扁平列表,就好像我使用的是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

希望我的榜样足够。

2 个答案:

答案 0 :(得分:1)

你可以像这样做一个双from;

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 :(得分:1)

如果没有看到您的确切实体,我猜你想要这样的东西

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

使用EF,您可以使用通过外键关联的表的导航属性。要进行左连接,只需在导航属性集合上使用DefaultIfEmpty()