【问题标题】:Complex SQL Server query to LINQ to SQL query C#复杂的 SQL Server 查询到 LINQ to SQL 查询 C#
【发布时间】:2016-08-23 10:24:03
【问题描述】:

我是 linq to sql 新手,我有一些复杂的 SQL 查询。

我的 SQL Server 查询很快就会执行此操作:我有 2 个表,product (a) 和 productorder (b)。产品有数量和第二个数量,它会警告客户还有多少项目仍在进行中。

在“a”中,如果我们订购 5 则我们有 10 篇论文。然后表中的第二个数量值为 5。如果我们订购更多:5 = 5 + 更多

所以我在这里编写我的 T-SQL。我想要一个 linq to sql

UPDATE a 
SET a.secondamount = a.secondamount + b.orderedamount 
INNER JOIN b ON a.productid == b.productid 
WHERE b.status = false ;

【问题讨论】:

  • 您已经编写了一个 SQL 查询。你想把它翻译成 LINQ 吗?
  • 是的,这段代码是我在旧程序中使用的。现在我必须将每个 sqlcommand/reader 等替换为 linq to sql。我几乎用这个替换了我坚持的所有东西。

标签: c# sql sql-server linq


【解决方案1】:

Linq 不用于更新,而是用于查询。您可以使用 linq 查找要更新的所有记录并准备数据,但更新本身应该单独进行。

var result = from itemA in a
             join itemB in b on itemA.productId equals itemB.productId
             where itemB.Status == false
             select new { itemA, itemB.orderedamount };

foreach(var item in result)
{
    //do update using item.itemA.secondAmount + item.orderedamount
}

【讨论】:

  • Gilad,抱歉,试图使您的查询可编译并引入了另一个愚蠢的错误。
  • 我的意思是我在第一次编辑时破坏了你的答案,所以我为此道歉。
  • @IvanStoev - 好吧,你明白了。 equals 只是一个愚蠢的错误:) 哈哈。关于joinwhere 相比 - 我知道join 在原始sql 方面是正确的,但是如果该连接产生多个记录会发生什么?..这就是我改变它的原因到Any
  • 好吧,特别是在这种情况下,我并没有考虑性能或基数,而只是你需要 itemBselect 中:-)
  • @IvanStoev - 哦当然哈哈愚蠢的我。我最初是通过加入来完成的,然后在没有检查的情况下进行了更改,哈哈 :) 感谢您的编辑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多