2010-03-06 34 views
2
select * form autor 
    inner join (carte inner join carte_autor using id_carte) 
    using id_autor 
    group by id_autor; 

如何使用LINQ编写此代码?如何将SQL转录为LINQ

谢谢。

回答

0

如果您使用设计器创建DataContext并且具有适当定义的外键,则这些属性应显示为您的实体类(实体或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); 

注意,这将挑选出一个匿名类型。我发现通常在进行连接时,我最终会选择属性的一个子集成为匿名(有时是命名的)类型,而不是构成连接的实际实体。这就是我以这种方式展示它的原因。当然,您可以保留全部对象并相应地调整选择/组。