我有以下LINQ查询:LINQ到数据集,查询优化
var itembind = (from q in dsSerach.Tables[0].AsEnumerable()
select new
{
PatternID = q.Field<int>("PatternID"),
PatternName = q.Field<string>("PatternName") + " " + q.Field<string>("ColorID") + q.Field<string>("BookID"),
ColorID = q.Field<string>("ColorID"),
BookID = q.Field<string>("BookID"),
CoverImage = (from img1 in objJFEntities.ProductImages.ToList()
where img1.PatternName.ToLower() == q.Field<string>("PatternName").ToLower()
select new CoverImage
{
URL = "Images/MediumPatternImages/" +
q.Field<string>("PatternName") + "_" + q.Field<string>("ColorID") + q.Field<string>("BookID") + q.Field<string>("ImageExtension"),
ID = q.Field<int>("ProductImageID")
}).FirstOrDefault(),
TotalCount = q.Field<int>("TotalCount")
}).Distinct();
var patterns = (from r in itembind
group r by new { r.PatternID, r.ColorID } into g
select new SearchPattern
{
PatternID = g.Key.PatternID,
PatternName = string.Join(",", g.OrderBy(s => s.ColorID).OrderBy(s => s.BookID)
.Select(s => String.Format("<a href='{0:s}' title='{1:s}'>{2:s}</a><br />",
new object[] { String.Format("Product.aspx?ID={0}&img={1}", g.Key.PatternID, s.CoverImage.ID), s.PatternName, s.PatternName })).FirstOrDefault()),
CoverImage = g.Count() > 1 ? (from img1 in objJFEntities.ProductImages.ToList()
where img1.ProductImageID == g.Select(i => i.CoverImage.ID).FirstOrDefault() && img1.ColorID.ToString() == g.Key.ColorID
select new CoverImage
{
URL = "Images/MediumPatternImages/" +
img1.PatternName + "_" + img1.ColorID + img1.BookID + img1.ImageExtension,
ID = img1.ProductImageID
}).FirstOrDefault() : g.Select(i => i.CoverImage).FirstOrDefault()
}).ToList();
这些查询正在采取更多然后1分钟到执行只为1000条记录。 dsSearch是一个数据集,填充了SQL中从我的过程返回的记录。 我正在使用实体框架。该网站使用IIS7.0进行部署。 SQL Server 2008正在使用中。
我“错误消息:超时过期之前,操作完成或服务器没有响应超时时间已过。” 通过登录“无法打开数据库‘DB’请登录失败。 “。 &“底层提供程序在打开时失败。”这种错误非常频繁的网站。
请告诉我如何优化这样的查询。
编辑:
下面是该过程
您确认您的连接字符串是正确的吗?你在使用集成安全吗? –
是的,我验证了这一点。在连接字符串 – Neha
我不使用集成安全性的错误当然意味着其对数据库超时,而不是查询的连接(我觉得默认的超时时间为60秒)。我会检查连接和你的IIS设置。 –