Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance web应用程序中的查询速度非常慢,但linqpad中的查询速度非常快_Performance_Entity Framework_Linq_Firebird - Fatal编程技术网

Performance web应用程序中的查询速度非常慢,但linqpad中的查询速度非常快

Performance web应用程序中的查询速度非常慢,但linqpad中的查询速度非常快,performance,entity-framework,linq,firebird,Performance,Entity Framework,Linq,Firebird,我使用实体框架和Firebird数据库,如下所示 这里是我正在运行的查询 Int32 nn = 4308; VISITE v = VISITEs.FirstOrDefault(a => a.VINUM == nn); DateTime d = (DateTime) v.DATEVIS; Int32 p = (Int32) v.PANUM; // First Select var numberGroups = from n in VISRUBs.Where(a => a.VI

我使用实体框架和Firebird数据库,如下所示

这里是我正在运行的查询

Int32 nn = 4308;
VISITE v = VISITEs.FirstOrDefault(a => a.VINUM == nn);
DateTime d = (DateTime) v.DATEVIS;
Int32 p = (Int32) v.PANUM;

// First Select   
var numberGroups = from n in VISRUBs.Where(a => a.VISANA.VISITE.DATEVIS <= d && a.VISANA.VISITE.PANUM == p)
 group n by n.RUBRIQUE into g

select new {
    RemainderCHAPLIB = g.Key.ANALYSE.CHAPITRE.LIBELLE,
    RemainderLIB = g.Key.LIBELLE,
    RemainderRUNUM = g.Key.RUNUM,
    vals = from vlist in g.OrderByDescending(a => a.VISANA.VISITE.DATEVIS)
    select vlist.VALEUR
};

//Second Select 
var lst = from n in numberGroups.
ToList().Where(a => a.RemainderLIB != null)
 select new {
    RemainderCHAPLIB = n.RemainderCHAPLIB,
    RemainderLIB = n.RemainderLIB,
    RemainderRUNUM = n.RemainderRUNUM,
    VAL = n.vals.FirstOrDefault(),
    ANT = n.vals.Skip(1).FirstOrDefault()
};
在linqpad中大约需要0.08秒,但在web应用程序中大约需要60秒

它挂在托利斯特声明上

在这一点上,我真的不知道该怎么想,所以任何帮助或想法都是非常受欢迎的

感谢并祝您好运

在添加where条件后,您应该将第二次列表检索更改为call ToList。这样可以避免不必要地将记录带到客户端。在这种情况下,您根本不需要ToList,因为您可以将where作为linq查询的一部分

var lst = from n in numberGroups
          where n.RemainderLIB != null)
          select new {
             RemainderCHAPLIB = n.RemainderCHAPLIB,
             RemainderLIB = n.RemainderLIB,
             RemainderRUNUM = n.RemainderRUNUM,
             VAL = n.vals.FirstOrDefault(),
             ANT = n.vals.Skip(1).FirstOrDefault()
          };

Web应用程序和LinqPad正在访问相同的数据库行数、索引数?是的,完全相同的数据库OK有一些进展,查询var lst=from n in numberGroups。where=>a.RemainderLIB!=null选择新{RemainderCHAPLIB=n.RemainderCHAPLIB,RemainderLIB=n.RemainderLIB,RemainderRUNUM=n.RemainderRUNUM,VAL=n.vals.FirstOrDefault};添加`前后的标志单击评论框旁的“帮助”以获取更多信息尽管我大约4/5秒,仍然很慢!但是,如果我添加最后一个字段ANT=n.vals.Skip1.FirstOrDefault,我会得到一个例外方法“Skip”仅支持LINQ to Entities中的排序输入。方法“OrderBy”必须在方法“Skip”之前调用。