我有以下 Linq2Sql,它为我的“SELECT”语句执行不止一次往返。我不知道为什么。首先是代码,然后是解释:-
from p in db.Questions
select new Models.Question
{
Title = p.Title,
TagList = (from t in p.QuestionTags
select t.Tag.Name).ToList()
}
现在数据库是
问题 QuestionTags 标签
所以一个问题有一对多标签,中间有一个链接表。这样,我可以多次重复使用标签。 (如果有的话,我愿意接受更好的模式)。
这样做会执行 Linq2Sql 生成的以下 Sql 代码
SELECT [t0].[QuestionId] AS [ID], etc.... <-- that's the good one
.
exec sp_executesql N'SELECT [t1].[Name]
FROM [dbo].[QuestionTags] AS [t0]
INNER JOIN [dbo].[Tags] AS [t1] ON [t1].[TagId] = [t0].[TagId]
WHERE [t0].[QuestionId] = @x1',N'@x1 int',@x1=1
第二个 sql 块列出了 2x ..我认为这是因为第一个 sql 块返回两个结果,因此第二个 sql 块会针对第一个 sql 块的每个结果触发。
有什么方法可以让我使用这个 sql 语句而不是 1 + n,其中 n = 第一个查询的结果数?
Update:
我已经尝试过急切加载和延迟加载,但没有区别。
DataLoadOptions dataLoadOptions = new DataLoadOptions();
dataLoadOptions.LoadWith<Question>(x => x.QuestionTags);
dataLoadOptions.LoadWith<QuestionTag>(x => x.Tag);
db.LoadOptions = dataLoadOptions;