1

我已经很多年没有写过 SQL 了,现在我正在开发一个更“渴望性能”的网站。有人可以帮我将其转换为删除 SQL 命令吗?

我有一堆这样的,所以帮助我解决这个问题对我来说很重要,谢谢!

我做到了这一点:

Delete FROM [DbName].[dbo].[RatingListTriangleModels] 
WHERE  ...

Linq 选择命令:

var allRatingListObjects = from row in ctx.RatingListTriangle
                           where
                              (row.To1Id == myToid && row.To2Id == theirTradeObjectid)
                               || (row.To2Id == myToid && row.To3Id == theirTradeObjectid)
                               || (row.To3Id == myToid && row.To1Id == theirTradeObjectid)
                           select row;

更新:这是我寻求的工作解决方案:

using (SqlCommand command = new SqlCommand
                ("delete TBL from RatingListTriangleModels TBL where ( TBL.To1Id = @MY_ID and TBL.To2Id = @OTHER_ID ) or ( TBL.To2Id = @My_ID and TBL.To3Id = @OTHER_ID ) or ( TBL.To3Id = @My_ID and TBL.To1Id = @OTHER_ID )", cn))
            {
                // Add new SqlParameter to the command.
                command.Parameters.Add(new SqlParameter("MY_ID", myToid));
                command.Parameters.Add(new SqlParameter("OTHER_ID", theirTradeObjectid));
                var no = command.ExecuteNonQuery();
            }
4

2 回答 2

2

这应该删除您在 linq-statement 中指定的记录,但您需要用您拥有的相应 id替换@YOUR_ID和。@OTHER_ID

您可以使用SqlParameter. 例子

delete from [DbName].[dbo].[RatingListTriangleModels] TBL
where ( TBL.To1Id = @YOUR_ID and TBL.To2Id = @OTHER_ID )
   or ( TBL.To2Id = @YOUR_ID and TBL.To3Id = @OTHER_ID )
   or ( TBL.To3Id = @YOUR_ID and TBL.To1Id = @OTHER_ID )  
于 2013-01-02T18:16:38.487 回答
1

如果你想删除 linq 使用 TSQL 选择的行,你可以这样做

DECLARE @p0 int;
DECLARE @p1 int;
SET @p0 = <some integer>;
SET @p1 = <some other integer>;


DELETE
            [DbName].[dbo].[RatingListTriangleModels]
    WHERE
            ([To1Id] = @p0 AND [To2Id] = @p1)
        OR  
            ([To2Id] = @p0 AND [To3Id] = @p1)
        OR
            ([To3Id] = @p0 AND [To1Id] = @p1);

当然,您可能希望将语句传递给ExecuteCommand您的上下文并将 id 作为参数传递,然后 .Net 会将其包装在sp_executeSql对您的调用中。这将防止注入攻击,为您提供查询计划重用的好处和直接 TSQL 操作的灵活性。

我会警告我的答案,像这样的简单操作可能会在 linq 中等效地执行,而不会产生任何额外的复杂性。

于 2013-01-02T18:18:23.813 回答