前几天我用ef开始冒险。
我想从数据库中获取最常用的项目列表并构建此代码:
DateTime dtLastMonth = DateTime.Now.AddMonths(-1);
int[] KontrahentAdres_GIDNumer = new int[]{ 13350, 15494 };
int[] KontrahentAdres_GIDTyp = new int[]{ 864 };
var query = (from dp in DokumentyPoczties
join so in SprawyObiekties on new { dp.ID_DokumentuPoczty, dp.ID_TYP_DokumentuPoczty } equals new { so.ID_DokumentuPoczty, so.ID_TYP_DokumentuPoczty }
into soTemp
from sot in soTemp.DefaultIfEmpty()
join hz in HistoriaZdarzens on new { dp.ID_DokumentuPoczty, dp.ID_TYP_DokumentuPoczty } equals new { ID_DokumentuPoczty = hz.ID_Obiektu, ID_TYP_DokumentuPoczty = hz.ID_TYP_Obiektu }
into hzTemp
from hzt in hzTemp.DefaultIfEmpty()
join wp in WysylkiPoczties on new { dp.ID_DokumentuPoczty, dp.ID_TYP_DokumentuPoczty } equals new { wp.ID_DokumentuPoczty, wp.ID_TYP_DokumentuPoczty }
into wpTemp
from wpt in wpTemp.DefaultIfEmpty()
where dp.PRJ_Kod.Length > 0 && hzt.TypZdarzenia == 1 && hzt.DataCzas >= dtLastMonth
orderby dp.PRJ_Kod
select new { dp.PRJ_Kod, dp.UmW_GIDNumer, dp.ZamNagGIDNumer, wpt.KontrahentAdres_GIDNumer, wpt.KontrahentAdres_GIDTyp, hzt.DataCzas, sot.ID_Sprawy, sot.ID_TYP_Sprawy });
//query = query.Where(x => KontrahentAdres_GIDNumer.Contains((int)x.KontrahentAdres_GIDNumer) && KontrahentAdres_GIDTyp.Contains((int)x.KontrahentAdres_GIDTyp));
var query2 = from qr in query
select new { qr.PRJ_Kod };
int count;
var query3 = query2.Where(x => x.PRJ_Kod != null).GroupBy(x => x.PRJ_Kod).Select(gr => new { gr.Key, count = gr.Count() }).OrderByDescending(x => x.count).Take(20);
Console.Write(query3);
SQL查询:
-- Region Parameters
DECLARE @p0 Int = 0
DECLARE @p1 Int = 1
DECLARE @p2 DateTime = '2014-02-28 16:49:18.585'
-- EndRegion
SELECT TOP (20) [t5].[PRJ_Kod] AS [Key], [t5].[value] AS [count]
FROM (
SELECT COUNT(*) AS [value], [t4].[PRJ_Kod]
FROM (
SELECT [t0].[PRJ_Kod], [t2].[DataCzas] AS [value], [t2].[TypZdarzenia]
FROM [DokumentyPoczty] AS [t0]
LEFT OUTER JOIN [SprawyObiekty] AS [t1] ON ([t0].[ID_DokumentuPoczty] = [t1].[ID_DokumentuPoczty]) AND ([t0].[ID_TYP_DokumentuPoczty] = [t1].[ID_TYP_DokumentuPoczty])
LEFT OUTER JOIN [HistoriaZdarzen] AS [t2] ON ([t0].[ID_DokumentuPoczty] = [t2].[ID_Obiektu]) AND ([t0].[ID_TYP_DokumentuPoczty] = [t2].[ID_TYP_Obiektu])
LEFT OUTER JOIN [WysylkiPoczty] AS [t3] ON ([t0].[ID_DokumentuPoczty] = [t3].[ID_DokumentuPoczty]) AND ([t0].[ID_TYP_DokumentuPoczty] = [t3].[ID_TYP_DokumentuPoczty])
) AS [t4]
WHERE ([t4].[PRJ_Kod] IS NOT NULL) AND (LEN([t4].[PRJ_Kod]) > @p0) AND ([t4].[TypZdarzenia] = @p1) AND ([t4].[value] >= @p2)
GROUP BY [t4].[PRJ_Kod]
) AS [t5]
ORDER BY [t5].[value] DESC
快跑00:00.026但是当我尝试在我的应用程序中获得结果时,我必须等待8-9秒。
你能帮助我如何优化它吗?