繁体   English   中英

带有嵌入式列表的 Linq to SQL 分组会导致查询过多

[英]Linq to SQL grouping with embedded lists causes too many queries

我正在开发一个查询来获取和加入 C# 中的一些 SQL 表,并且在数据集中的分组和枚举方面遇到了一些问题。 我的查询如下。 这为我提供了我正在寻找的格式的数据,但是当我尝试添加枚举列表时花费的时间太长,如下所示。 当我查看引擎盖时,我可以看到它正在执行太多的 SQL 查询。 我想把它变成一个。 使用 LinqPad:

void Main()
{
    var nightlyRuns = (from a in LoadTestSummaries
                join b in LoadTestTestSummaryData
                on a.LoadTestRunId equals b.LoadTestRunId
                where a.TargetStack == "LoadEnv" &&
                a.TestGuid != null &&
                a.StartTime != null &&
                a.LoadTestRunId != null

                orderby a.StartTime
                group new {a, b} by new
                {
                    a.TestGuid,
                    a.Name,
                    a.Description,
                    a.StartTime,
                    a.Duration,
                    a.NumAgents,
                    a.NumHosts,
                    a.PassFail,
                    a.ResultsFilePath,
                    a.Splunk
                } 
                into g
                let scenarioStart = g.Min(s => s.a.StartTime) ?? g.Min(s => s.a.DateCreated)        
                let testCases = g.Select(s => s.b)
                orderby scenarioStart 
                select new 
                {
                    TestGuid = g.Key.TestGuid,
                    ScenarioRun = new 
                    {
                        Name = g.Key.Name,
                        Description = g.Key.Description,
                        StartTime = scenarioStart,
                        Duration = g.Key.Duration,
                        NumAgents = g.Key.NumAgents,
                        NumHosts = g.Key.NumHosts,
                        Result = g.Key.PassFail,
                        ResultsFilePath = g.Key.ResultsFilePath,
                        SplunkLink = g.Key.Splunk,
                        // PROBLEM: Causes too many queries:
                        TestRuns = from t in testCases select t.TestCaseId
                    }
                }).ToLookup(g => g.TestGuid, g => g.ScenarioRun);

    nightlyRuns["ba593f66-695f-4fd1-99c3-71253a2e4981"].Dump();
}

“TestRuns”行导致过多的查询。 知道我在这里做错了什么吗?

感谢您的任何见解。

测试的艰难答案,但我认为我们可以通过以下方式避免分组和多个查询:( https://msdn.microsoft.com/en-us/library/bb311040.aspx

           var nightlyRuns = (from a in LoadTestSummaries
            join b in LoadTestTestSummaryData
            on a.LoadTestRunId equals b.LoadTestRunId
            where a.TargetStack == "LoadEnv" &&
            a.TestGuid != null &&
            a.StartTime != null &&
            a.LoadTestRunId != null
            into testGroup

            select new 
            {
                TestGuid = a.TestGuid,
                ScenarioRun = new 
                {
                    Name = a.TestGuid,
                    Description = a.Description,
                    StartTime = a.StartTime ?? a.DateCreated,
                    Duration = a.Duration,
                    NumAgents = g.Key.NumAgents,
                    NumHosts = a.NumHosts,
                    Result = a.PassFail,
                    ResultsFilePath = a.ResultsFilePath,
                    SplunkLink = a.Splunk,
                    // PROBLEM: Causes too many queries:
                    TestRuns =testGroup
                }
            }).OrderBy(x=>x.StartTime).ToLookup(x => x.TestGuid, x => x.ScenarioRun);

            nightlyRuns["ba593f66-695f-4fd1-99c3-71253a2e4981"].Dump();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM