【问题标题】:Convert SQL update query to c# LINQ code将 SQL 更新查询转换为 c# LINQ 代码
【发布时间】:2018-04-06 01:15:18
【问题描述】:

我想将此 SQL 查询转换为 C# 代码:

UPDATE Layouts 
SET LayoutDetails.modify('delete /ColumnLayout/LayoutColumns/Column[@PropertyId = sql:variable("@propId")]') 
WHERE LayoutId = 236

此查询删除 SQL Server 表中 XML 列中的一个节点。我想使用 LINQ 在 C# 中执行类似的操作。

【问题讨论】:

  • 到目前为止你尝试过什么?贴一些代码。
  • 您使用的是哪个 ORM?我认为UPDATE语句是基于ORM的,LINQ to SQL/LINQ to Entities主要用于SELECT语句。
  • @IpsitGaur :通常用于更新任何记录,将获取带有 layoutid 的相关记录,修改相关数据字段并保存更改。但是在这里我必须使用 XML 列所以完全不知道。如果没有任何效果,我必须使用 ADO.net
  • @TetsuyaYamamoto EntityFramework
  • @Prasu 只需先执行一个简单的 SELECT 查询,例如(db.Layouts.Where(x => x.ColumnName == value),将所有更新的值分配给结果集并使用db.SaveChanges() 方法(db 是您的DbSet 名称)。

标签: c# sql-server linq xml-column


【解决方案1】:

LINQ 没有类似的东西可用,因为 LINQ 不以这种方式与数据库交互。我不确定你用什么来连接你的数据库,但里面应该有一些东西可以让你这样做。

例如,Entity Framework 具有 SaveChanges(),它将对对象所做的任何更改作为 UPDATE sql 命令推送到您连接的数据库。其他类型的 ORM 应该有类似的东西。

【讨论】:

  • 是的,我知道实体框架中的 Savechanges 方法,但我想知道更新 LINQ 查询中的 XML 列并将更改保存到 DB。
  • @Prasu 这里缺少一些东西,那么你将需要 LINQ 以外的东西来执行此操作。 LINQ 将允许您操作集合,但它与将更改推送到任何内容没有任何关系。
【解决方案2】:

如果可以读取该 XML 列,那么您可以更新该列,然后使用SaveChanges() 方法。喜欢

var details = (from lay in context.Layouts where lay.id = 236 select lay).firstOrdefalut();

details.ColumnLayout.LayoutColumns.PropertyId = yourId;

saveChange();

检查会有帮助

【讨论】:

  • 是的,这就是我们通常使用 EF 更新记录的方式,但在这里我想删除一个包含 propertyid 为 43 的节点。整个节点必须从 XML 列数据中删除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-25
  • 1970-01-01
  • 2020-12-13
  • 2021-05-30
  • 2012-01-29
  • 2014-08-14
  • 1970-01-01
相关资源
最近更新 更多