4
安裝.Net 4.5
後,EF生成的查詢出現問題。在linq到.Net 4.0
的相同查詢能夠正常工作。我正在使用Firebird數據庫,它不支持命令OUTER APPLY
。有沒有辦法修改下面的查詢linq,以便它的行爲在.Net 4.5
?.net 4.5和實體框架中的其他應用程序
當前LINQ查詢:
int[] AROIds = (from x in context.RISK_T_ASSESS_HIST
where (x.ID_RISKOBJECT.HasValue && x.F_CREATEDON >= Freq.StartDate
&& x.F_CREATEDON <= Freq.EndDate)
group x by x.ID_RISKOBJECT into gr
let lastCreated = gr.Max(p => p.F_CREATEDON)
select new
{
ObjId = gr.Key
, LastStatus = gr.Where(p => p.F_CREATEDON == lastCreated
&& p.ID_RISKOBJECT == gr.Key)
.Select(p => p.F_STATUS).FirstOrDefault()
}).Where(x => x.LastStatus == 0 || x.LastStatus == 1)
.Select(x => x.ObjId.Value).ToArray();
SQL的產生。 Net 4.5:
SELECT
"Project1"."ID_RISKOBJECT" AS "ID_RISKOBJECT"
FROM (SELECT
"GroupBy1"."A1" AS "C1",
"GroupBy1"."K1" AS "ID_RISKOBJECT"
FROM (SELECT
"Extent1"."ID_RISKOBJECT" AS "K1",
MAX("Extent1"."F_CREATEDON") AS "A1"
FROM "RISK_T_ASSESS_HIST" AS "Extent1"
WHERE (("Extent1"."ID_RISKOBJECT" IS NOT NULL)
AND ("Extent1"."F_CREATEDON" >= 2013-04-17))
AND ("Extent1"."F_CREATEDON" <= 2013-04-17)
GROUP BY "Extent1"."ID_RISKOBJECT"
) AS "GroupBy1") AS "Project1"
OUTER APPLY (SELECT FIRST (1)
"Extent2"."F_STATUS" AS "F_STATUS"
FROM "RISK_T_ASSESS_HIST" AS "Extent2"
WHERE (((("Extent2"."ID_RISKOBJECT" IS NOT NULL)
AND ("Extent2"."F_CREATEDON" >= 2013-04-17))
AND ("Extent2"."F_CREATEDON" <= @2013-04-17))
AND (("Project1"."ID_RISKOBJECT" = "Extent2"."ID_RISKOBJECT") OR (("Project1"."ID_RISKOBJECT" IS NULL)
AND ("Extent2"."ID_RISKOBJECT" IS NULL)))) AND (("Extent2"."F_CREATEDON" = "Project1"."C1")
AND ("Extent2"."ID_RISKOBJECT" = "Project1"."ID_RISKOBJECT"))) AS "Limit1"
WHERE (0 = "Limit1"."F_STATUS") OR (1 = "Limit1"."F_STATUS")
*我使用的是Firebird數據庫,它不支持命令OUTER APPLY *聽起來像提供者的問題,你使用正確的嗎? –
Dupe http://stackoverflow.com/questions/16650954/entity-framework-generates-different-queries-on-different-workstations,但我建議不要關閉這個問題,因爲其他問題基本上「不要安裝.NET 4.5「標記爲答案... – hvd
我需要安裝.net 4.5。我可以讓EF工作在4.0下,即使它安裝在環境'.Net 4.5?' –