另一種選擇是編寫查詢:
var data = dbContext.Sample;
data = (ddlGender == 1) ? data.Where(i => i.locId > 100)
: data.Where(i => i.locId < 100);
此選項消除了重複,不具有與生成的查詢附加條件的任何開銷(看到更新),我也覺得它很可讀。我也建議給一些明智的名字,以不斷100
。
更新:上面的查詢將產生簡單而明確的SQL
SELECT [Extent1].[locId] AS [locId],
[Extent1].[Foo] AS [Foo],
[Extent1].[Bar] AS [Bar]
FROM [dbo].[Sample] AS [Extent1]
WHERE [Extent1].[locId] > 100
如果您將添加複雜的條件下,它會被轉換爲SQL。例如。
(item.locId > 100 && ddlGender == 1) || (item.locId < 100 && ddlGender != 1)
將被轉換爲下面的查詢與兩個參數(假設你已經在數據庫中不可爲空場LOCID)
SELECT [Extent1].[locId] AS [locId],
[Extent1].[Foo] AS [Foo],
[Extent1].[Bar] AS [Bar]
FROM [dbo].[Sample] AS [Extent1]
WHERE (([Extent1].[locId] > 100) AND (1 = @p_linq_0) AND (@p_linq_0 IS NOT NULL))
OR (([Extent1].[locId] < 100) AND
(NOT ((1 = @p_linq_1) AND (@p_linq_1 IS NOT NULL))))
你不能避免某種條件在這裏。 – wudzik
除非有必要,否則不要進行優化。此代碼不是瓶頸的來源,即使避免出現此情況,也不會獲得任何收益。 – Ehsan
我不確定你爲什麼要「優化」掉if語句。與數據訪問相比,這幾乎是瞬間的。我認爲你在那裏得到了很好的結果。 – BenM