SELECT DISTINCT k.* FROM [dbo].[kinds] K
INNER JOIN KindGraphic KG ON K.KindId = KG.KindId
INNER JOIN Graphics G ON KG.GraphicId = G.GraphicId
WHERE K.CategoryType = 2
AND G.IsSpecial = 1
如何在EF中写这个?我是EF的新手。我使用dbContex作为我的MVC项目。
请注意" KindGraphic" table以这种方式映射
因此我无法使用此方法https://stackoverflow.com/a/21986882/3264939
modelBuilder.Entity<Kind>()
.HasMany(c => c.Graphics)
.WithMany(g => g.Kinds)
.Map(t => t.MapLeftKey("KindId")
.MapRightKey("GraphicId")
.ToTable("KindGraphic"));
答案 0 :(得分:1)
原始查询的结果是某种复杂的结果。因此,如果不选择确切的列(而不是使用*
),我假设结果包含在这样的匿名类型中:
{
Kind,
Graphic
}
我了解KindGraphic
是某种联结(加入)表,因此在结果中包含的信息并不重要(我们可以从{{1}访问KindId
和来自Kind
的{{1}}。这是LINQ查询:
GraphicId
在您使用Graphic
进行修改后,您可以翻译查询,因为您希望所有var result = context.kinds.Where(e => e.CategoryType == 2)
.SelectMany(e=> e.Graphics.Where(g=>g.IsSpecial == 1),
(e, g) => new { Kind = e, Graphic = g} );
类型类型为distinct
,任何图形均为kinds
。所以它应该是这样的:
2