gpt4 book ai didi

c# - Linq to SQL 一对多关系

转载 作者:行者123 更新时间:2023-11-30 17:09:29 25 4
gpt4 key购买 nike

最近几天我一直在为 linq 查询性能而苦苦挣扎:

LinqConnectionDataContext context = new LinqConnectionDataContext();
System.Data.Linq.DataLoadOptions options = new System.Data.Linq.DataLoadOptions();
options.LoadWith<Question>(x => x.Answers);
options.LoadWith<Question>(x => x.QuestionVotes);
options.LoadWith<Answer>(x => x.AnswerVotes);
context.LoadOptions = options;
var query =( from c in context.Questions
where c.UidUser == userGuid
&& c.Answers.Any() == true
select new
{
c.Uid,
c.Content,
c.UidUser,
QuestionVote = from qv in c.QuestionVotes where qv.UidQuestion == c.Uid && qv.UidUser == userGuid select new {qv.UidQuestion, qv.UidUser },
Answer = from d in c.Answers
where d.UidQuestion == c.Uid
select new
{
d.Uid,
d.UidUser,
d.Conetent,
AnswerVote = from av in d.AnswerVotes where av.UidAnswer == d.Uid && av.UidUser == userGuid select new { av.UidAnswer, av.UidUser }
}
}).ToList();

查询必须运行 5000 行,最多需要 1 分钟。我怎样才能提高这个查询的性能?

更新:

enter image description here

最佳答案

让您入门的东西。

CREATE PROCEDURE GetQuestionsAndAnswers
(
@UserGuid VARCHAR(100)
)
AS
BEGIN

SELECT
c.Uid,
c.Content,
c.UidUser,
qv.UidQuestion,
qv.UidUser,
av.UidAnswer,
av.UidUser,
av.Content,
d.Uid,
d.UidUser,
d.Content
FROM Question c
INNER JOIN QuestionVotes qv ON qv.UidQuestion = c.Uid AND qv.UidUser = @UserGuid
INNER JOIN Answers d ON d.UidQuestion = c.Uid
INNER JOIN AnswerVotes av ON av.UidAnswer = d.Uid AND av.UidUser = @UserGuid
WHERE c.UidUser = @UserGuid

END

默认情况下,您已经在主列上拥有聚集索引(只需在您的数据库端确认这一点),并且您希望在 QuestionVote - UidUser 列、AnswerVote - UidUser 列和 Answer - UidQuestion 列上建立非聚集索引。

也可以看看这里。您可能希望使用 .AsQueryable() 而不是 ToList() 来延迟执行

Do you ToList()?

关于c# - Linq to SQL 一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12933794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com