如何将SQL转录为LINQ

时间:2010-03-06 16:00:57

标签: c# sql linq transform

select * form autor 
   inner join (carte inner join carte_autor using id_carte) 
   using id_autor
   group by id_autor;

如何使用LINQ编写此内容?

感谢。

1 个答案:

答案 0 :(得分:0)

如果您正在使用设计器创建DataContext并且已正确定义外键,则这些应在实体类(Entity或EntitySet)上显示为属性,具体取决于它是1-1还是1-many。如果没有指定外键,也可以在设计器中定义关系。

否则,您可以执行以下操作:

var carteAutors = db.Carte.Join( db.CarteAutor, (o,i) => o.ID_Carte == i.ID_Carte )
                    .Select( (o,i) => new { ID_Autor = i.ID_Autor, ...et al... } );

var q = db.Autors
          .Join( carteAutors, (o,i) => o.ID_Autor == i.ID_Autor )
          .Select( (o,i) => new { ID_Autor = o.ID_Autor, ...et al... )
          .GroupBy( a => a.ID_Autor );

请注意,这将选择匿名类型。我发现通常在进行连接时,我最终选择属性的子集为匿名(或有时命名)类型,而不是包含连接的实际实体。这就是我用这种方式展示的原因。当然,您可以保留完整的对象并相应地调整select / groupby。