优化嵌套的Linq到SQL查询

时间:2014-05-26 02:33:54

标签: optimization linq-to-sql nested

我有一个linq to sql查询,我试图优化。我已经找到了一个与调用数据库的sql查询数有关的主要问题。由于查询的嵌套特性 - 它是巨大的! (在SQL事件探查器中尝试14,000行)。哎哟!

我正在寻找急切的加载和使用LoadWith - 但是嵌套查询似乎有限制吗? (错误:System.InvalidOperationException:LoadOptions LoadWith类型图中不允许循环。)。有关如何让Linq to SQL加载一些相关数据并减少db命中率的任何想法?谢谢!

        List<EBCFPS> ebcfpsList = (from c in v3
                                                                    group c by c.CId into g
                                                                    select new EBCFPS()
                                                                    {
                                                                        CId = g.First().CId,
                                                                        CName = g.First().CName,
                                                                        CType = g.First().CType,
                                                                        SortOrder = g.First().SortOrder == null ? 0 : (int)g.First().SortOrder,
                                                                        EsGroup = (from q in g
                                                                                         select new EFPS()
                                                                                         {
                                                                                             EId = (int)q.EId,
                                                                                             EName = q.EName,
                                                                                             CESGroup = (from s in db.CES
                                                                                                              where s.EId == q.EId
                                                                                                              && s.CId == q.CId
                                                                                                              select new CESSFPS()
                                                                                                              {
                                                                                                                  CESId = s.CESId,
                                                                                                                  CId = s.CId,
                                                                                                                  EId = s.EId == null ? 0 : (int)s.EId,
                                                                                                                  FSCId = s.FSCId == null ? 0 : (int)s.FSCId,
                                                                                                                  SEV = s.SEV,
                                                                                                                  Score = s.Score
                                                                                                              }).ToList()
                                                                                         }).ToList()
                                                                    }).ToList();

对不起,代码看起来有点粗糙。

1 个答案:

答案 0 :(得分:0)

答案是编译查询。