微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决将 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 方法中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。