将 sql 查询转换为 linq,以便我可以在 foreach 循环中使用它

问题描述

我有一个 sql 查询,我想将其转换为 LINQ,以便我可以在 foreach 循环中访问 h.name 和 a.ActivityName

  SELECT al.HamsterID,h.name,a.ActivityName,al.Time
    FROM activitylog al 
    JOIN Activities a ON a.id = al.ActivityID 
    JOIN Hamsters h ON h.HamsterID = al.HamsterID
ORDER BY HamsterID

当前返回的是Hamster和Activity为null,它们是activitylog中的属性

解决方法

如果您首先使用数据库,并假设您已经在数据库对象中定义了主/外键关系,EF 将生成对父/子关系进行编码的类文件。因此 EF 生成的 Hamster 类将具有 ActivityLog 属性,ActivityLog 类将具有 Hamsters >Activites 属性等。如果您首先使用代码,则需要自己在数据库对象类定义和/或 DbContext.OnModelCreating 方法中执行此操作。这样就可以处理 SQL SELECTFROM 子句。 SQL 中的 ORDER BY 子句在 Linq 中将变为 .OrderBy(x => x.HamsterID)

如果使用 DBContext 日志属性写入控制台或日志文件等,您可以看到由 linq 生成和执行的 SQL。

如果ActivityLog实例的Hamster和Activity属性为空,那么你应该检查ActivityLog.HamsterIDActivityLog.ActivityID的值是否存在于 >Hamster 表和 Activity 表。如果是这样,则说明您的代码存在问题,无论是在数据库对象类定义中还是在 DbContext.OnModelCreating 方法中。