c# - 如何将 SQL 转录为 LINQ

标签 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 编写此代码?

谢谢。

最佳答案

如果您使用设计器创建 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。

关于c# - 如何将 SQL 转录为 LINQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2393089/

相关文章:

c# - MVC 渲染部分在布局中的脚本之前加载

c# - 如何从代码中获取 customErrors 的 defaultRedirect 值?

c# - LINQ/ Entity Framework : parameterless constructor issue

c# - 给定列表和种子的唯一名称

c# - 使用 Entity Framework 的具有多对多关系的 Linq 查询

c# - 如果字符串数据数组不同,则增加位置 C# (Unity)

c# - 无法从回历日期转换为公历日期 (c#)

c# - ASP.NET 中将数据库中的行配置为在特定时间后删除的最佳方法

php - 扩展 SELECT 查询

mysql - 基于条件 SELECT 的 COUNT