建筑物清单的持续时间长

时间:2014-03-31 15:08:52

标签: c# performance linq refactoring entity

前几天我用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秒。

你能帮助我如何优化它吗?

0 个答案:

没有答案