Performance web应用程序中的查询速度非常慢,但linqpad中的查询速度非常快
我使用实体框架和Firebird数据库,如下所示 这里是我正在运行的查询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
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”之前调用。