2013-01-02 16 views
1

我很多年沒有寫SQL了,現在我正在努力多一點「性能飢餓」的網站。 有人可以幫我把它轉換爲刪除SQL命令嗎?如何將此linq命令寫入等效的刪除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(); 
      } 
+1

但這linq不會刪除任何東西? – Jodrell

+0

重寫了標題。 –

+0

@Jodrell,那麼我想這就是爲什麼他斯塔克... :) – gdoron

回答

2

這應該刪除的記錄你在你的linq聲明中指定,但你需要替換@YOUR_ID@OTHER_ID與你有相應的ID。

你可以用SqlParameter來做到這一點。 Example

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) 
+1

@marc_s好吧^^刪除... – Viper

+0

我更新了我的問題與您的答案。任何ide的呢? –

+0

除了我得到你的例外沒有回答我的實際問題。乾杯! –

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中等效執行,而沒有任何這種額外的併發症。

+0

OP的問題有**兩個不同的'INT'值('myToId'和'theirTradeObjectId') - 你的答案只提供一個值,這可能不會做... –

+1

@marc_s,好點,固定。 – Jodrell

+0

@Jodrell它需要**從**刪除,而不僅僅是**刪除** – Viper