0
我試圖在linq裏寫條件的子查詢。但是當我在sql server profiler中查看我的sql語法時,我的查詢看起來很複雜且很長,並且在服務器中需要超時錯誤。如何在linq中寫入快速子查詢的條件
我想寫下面的查詢。
SELECT
T1.Id,
T2.Id,
DATEADD(HOUR,
ISNULL(
(
SELECT
MAX(T3.MaxHour) AS [MaxHour]
FROM TABLE3 T3 WITH(NOLOCK)
WHERE
T1.CategoryId=T3.CategoryId
),
0),T1.EndDate
),
T1.StartDate
FROM
TABLE1 T1 WITH(NOLOCK)
LEFT OUTER JOIN TABLE2 T2 WITH(NOLOCK) ON T1.Id=T2.Id
WHERE
DATEADD(HOUR,
ISNULL(
(
SELECT
MAX(T3.MaxHour) AS [MaxHour]
FROM TABLE3 T3 WITH(NOLOCK)
WHERE
T1.CategoryId=T3.CategoryId
),
0),T1.EndDate
)
> '2014-11-05 00:00:00'
AND
T1.StartDate < '2014-11-05 06:00:00'
ı寫了我的linq表達式這樣。
var actualData = from T1 in _context.TABLE1
join T2 in _context.TABLE2 on T1.Id equals T2.Id into data
from x in data.DefaultIfEmpty()
where
EntityFunctions.AddHours(T1.EndDate,
(
(int?)((from T3 in _context.TABLE3
where
T3.CategoryId == T1.CategoryId
select
T3).Max(row => row.MaxHour))
) ?? 0
) >= '2014-11-05 00:00:00'
&& T1.StartDate < '2014-11-05 06:00:00'
select
new
{
Id1 = T1.Id,
Id2 = T2.Id,
StartDate = T1.StartDate,
EndDate = EntityFunctions.AddHours(T1.EndDate,
(
(int?)((from T3 in _context.TABLE3
where
T3.CategoryId == T1.CategoryId
select
T3).Max(row => row.MaxHour))
) ?? 0
)
};
但它似乎不在sql中,我想看到。
我該怎麼寫linq?
謝謝。
也許這將有助於http://stackoverflow.com/questions/1220807/ nolock-with-linq-to-sql – juharr 2014-11-04 13:44:41
謝謝,但我的問題不是nolock表達式。 我的問題是在哪裏條件的子查詢。 Linq表達式在sql查詢中變得混亂,並且它有一個錯誤超時。我想在我的問題sql中看到我在sql server配置文件中的linq語法。 – 2014-11-04 14:43:51