2016-11-17 149 views
0

有誰知道如何翻譯此內容?當我打開調試器時,我得到3個不同的查詢,而var包含一組結果。我試圖用一個將調用存儲過程的方法替換該行,但我不明白查詢應該是什麼。非常感謝將LINQ轉換爲SQL

var restbl = 
     context.tbl_one.FirstOrDefault(d => d.qty < d.tbl_two.Count(a => !a.tbl_three.ust)) 
    ?? context.tbl_one.FirstOrDefault(d => d.qty > d.tbl_two.Count(a => !a.tbl_three.ust)); 


{SELECT 
`Extent1`.`id`, 
`Extent1`.`name`, 
`Extent1`.`qty`, 
`Extent1`.`cdate` 
FROM `tbl_one` AS `Extent1`} 

{SELECT 
`Extent1`.`id`, 
`Extent1`.`tbl_one_id`, 
`Extent1`.`tbl_three_id`, 
`Extent1`.`enabled` 
FROM `tbl_two` AS `Extent1`} 

{SELECT 
`Extent1`.`id`, 
`Extent1`.`ttid`, 
`Extent1`.`code`, 
`Extent1`.`cdate`, 
`Extent1`.`mdate`, 
`Extent1`.`prt`, 
`Extent1`.`ust` 
FROM `tbl_three` AS `Extent1`} 

var countToAdd = restbl.qty - context.tbl_two.Count(a => a.tbl_one_id == restbl.id && !a.tbl_three.ust); 
+0

你應該重構LINQ語句轉換成'context.tbl_one.FirstOrDefault(d => firstCondition || secondCondition)'。這將是一個SQL語句。 –

+0

但條件有道理嗎?是不是像'qty!= count'一樣? –

+0

謝謝@GertArnold,對不起,我的linq理解非常糟糕。我總是使用存儲過程並避免使用linq。我知道很多人會說我應該使用linq來代替,但是使用直接sql並且創建一個方法來調用它會容易得多。條件是有道理的,程序工作正常,我只是想替換edmx和linq。 – carol1287

回答

1

您可以使用LINQPad或Linquer工具輕鬆地將您的linq查詢轉換爲SQL,反之亦然。它們在轉換複雜查詢中非常有用。

0

我的假設是:(假設你使用MSSQL)

result= SELECT TOP 1 FROM tbl_one t1 WHERE t1.qty< (SELECT COUNT(*) FROM tbl_two t2 INNER JOIN tbl_three t3 ON t3.id=t2.tbl_three_id WHERE t3.ust = 0 AND t1.id=t2.tbl_one-id) 

if (result IS NULL) 
result= SELECT TOP 1 FROM tbl_one t1 WHERE t1.qty> (SELECT COUNT(*) FROM tbl_two t2 INNER JOIN tbl_three t3 ON t3.id=t2.tbl_three_id WHERE t3.ust = 0 AND t1.id=t2.tbl_one-id) 
+0

非常感謝你@olealbers,這有很大的幫助,我會嘗試這個,因爲吸菸現在是從我的腦海裏出來的。 MySQL而不是MSSQL,但我猜語法會非常相似。 – carol1287

+0

你碰巧知道var countToAdd的正確查詢嗎?非常感謝 – carol1287