我有以下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設置。 –