2011-10-15 95 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)