2011-10-15 101 views
-1

我該如何將此linq代碼轉換爲sql?SQL如果其他地方

if (storeId > 1) 
      { 
       query = from p in query 
         where (p.StoreId == storeId) 
         select p; 
      } 

如果storeId> 1我不想在SQL中進行WHERE比較。

UPDATE 這是我想在SQL做什麼:

SELECT * FROM test 
WHERE (
    (test.city = @city) 
    AND 
    (test.price = @price) 
    AND 
    (
    IF (@storeId > 1) 
    test.storeId = @storeId 
    ELSE 
    do not do anything 
) 
) 
+1

我不明白......如果你只是想將其轉換爲SQL,爲什麼不運行它並查看執行了哪些SQL?你什麼意思? –

+0

@Mark - OP希望(我認爲)在他的SQL查詢中包含外部的'if'子句。上面的代碼生成的LINQ查詢將不包含該內容。 –

+1

你似乎是自相矛盾的:你提供的代碼似乎在storeId> 1的時候恰好做了一個查詢(包括一個WHERE-claue)。或者我錯過了什麼?你能讓你的意圖更清楚嗎? – Kjartan

回答

3
Select * from p where p.storeid = @storeid or @storeid > 1 
0

嘗試

var queryresult = from p in query 
        where ((p.StoreId == storeId) && (storeId > 1)) 
         || (storeId <= 1) 
        select p; 
1

你的代碼看,它看起來像要檢索特定STOREID記錄storeId> 1。如果storeId < = 1,我還假設你的意思是你不想要where子句。 如果我的假設是正確的,你以後的SQL大概如下:

Select * from p where (@storeId > 1 and p.storeId = @storeId) or @storeId <= 1 

看你更新的問題後,該SQL應爲你工作:

SELECT * FROM test WHERE test.city = @city AND test.price = @price 
AND ((@storeId > 1 AND test.storeId = @storeId) or @storeId <=1) 

請注意,如果@storeId < = 1,它將返回所有匹配城市和價格的記錄。如果這不是你想要什麼,不想要任何記錄返回時@storeId < = 1,那麼你就可以刪除最後或如下條件:

SELECT * FROM test WHERE test.city = @city AND test.price = @price 
AND (@storeId > 1 AND test.storeId = @storeId)