0
我在我的asp.net網站有一個Linq To Sql查詢。Linq Query - 如何改進以下查詢?
此查詢也可以工作慢並確保它可以改進。
誰能幫幫我ReWrite this query?
我假設使用「連接」會使它更快,但不能正確的。 :(
下面是查詢:(輸入PARAMS:INT_GENDER)。
var users = from u in db.Users
where (u.gender == INT_GENDER) && (u.age > 25)
let fileId = (from f in db.Files
where f.username == u.username && f.approved
orderby f.primary
select f.id).FirstOrDefault()
let answer = (from a in db.Answers
where (a.username == u.username) &&
(a.q_id == (from q in db.Questions where q.type == 1
select q.id).FirstOrDefault()) &&
a.approved
select a).FirstOrDefault()
select new {
Username = u.u_username,
FileId = fileId !=null ? fileId : GetEmptyFileId(),
Answer = (answer == null ? "" : (answer.approved ? answer.value: "Empty"))
};
查詢是基於3個表 表: 1.用戶 2.文件 3.答案
- 用戶表中的用戶名列是標識
- 每個用戶可以有很多或沒有文件
- 每個用戶可以有很多或沒有答案。
謝謝! Dan
INT_GENDER ?? ??爲什麼不布爾如果你正在使用的是男性或女性。爲了獲得最佳性能,請使用存儲過程。這是因爲存儲過程緩存對於快速檢索非常有用的執行計劃。 – AboutDev 2009-11-14 22:17:15
謝謝。 1. INT_GENDER可以是0,1,2。 2.我寧願留在linq中,我知道我也可以使它成爲一個完整的查詢,但我希望先寫一個更好的查詢。 – dan 2009-11-14 22:23:44
@AboutDev準備好的查詢(如LINQ to SQL中使用的查詢)也將其執行計劃緩存起來。關於存儲過程的優越性的城市傳說正在變老。 – 2009-11-14 23:16:19