如何使用实体框架和 linq 编写此 sql 查询

Posted

技术标签:

【中文标题】如何使用实体框架和 linq 编写此 sql 查询【英文标题】:How can I write this sql query using entity framework and linq 【发布时间】:2016-06-05 05:36:01 【问题描述】:

我可以在实体框架中用相同的概念编写下面提到的查询吗

update o set o.Name='NewName'
from Organization o
Inner join Guardian g on o.OrgRowId=g.OrgRowId
where g.IsEnabled=1 and g.OrgRowId=1

请指导!!!

更新

根据要求,这就是我能够使用 join 编写选择查询,但无法在同一个查询中进行更新

var query = from o in Organizations             
                join g in Guardians on o.OrgRowId equals g.OrgRowId             
                where g.IsEnabled && g.GuardianRowId==1             
                select o;

更新 1 Kilanny,我试过你这样查询和更新我的,但它没有影响,我在 Linqpad 中运行这些查询

using (var context = new DbEntities())

    var query = from o in Organizations
                join g in Guardians on o.OrgRowId equals g.OrgRowId
                where g.IsEnabled && g.GuardianRowId == 1
                select o;
    foreach (var item in query)
           
        item.Name="New Organization Name";
        context.SaveChanges();
       
    query.Dump();

【问题讨论】:

你试过什么?您是否搜索过如何在 linq 中编写 updatejoin?这个网站上已经有很多关于它的问题了。 C# Joins/Where with Linq and Lambda的可能重复 @Kilanny,我知道如何使用 linq 编写 join,但对如何在 linq 中使用 join 编写更新查询并在 1 个查询中实现目标而不是编写多个查询感到困惑 @Shax 您可以展示您尝试过的代码,以便我们继续使用它 @Shax 您可能无法一步完成。 LINQ 旨在允许查询,而不是修改。因此,EF 只允许类似查询的“查询”。必须对已从数据库中检索到的项目进行任何更改,这些项目稍后会由数据库上下文转换为单独的 CRUD 请求。如果这是一项性能关键任务,那么您可以尝试使用存储过程 - ***.com/questions/20901419/…。 【参考方案1】:
var query = from o in Organizations             
            join g in Guardians on o.OrgRowId equals g.OrgRowId             
            where g.IsEnabled && g.GuardianRowId==1             
            select o;
foreach (var item in query)
   item.Name="NewName";
entities.SaveChanges();

【讨论】:

以上是关于如何使用实体框架和 linq 编写此 sql 查询的主要内容,如果未能解决你的问题,请参考以下文章

动态 SQL 到 LINQ 实体框架

使用 LINQ 和实体框架在一个 SQL 查询中从多个表中提取数据

如何为实体框架 Sql 提供程序编写测试并访问生成的 Sql 命令

实体框架/Linq to SQL:跳过和采取

如何编写此 LINQ 查询的 SQL 版本?

如果不支持包含,您如何在 LINQ to Entities(实体框架)中执行 SQL 样式的“IN”语句?