2

假设我有 3 个表 Posts、PostTags 和 Tags 定义多对多关系。我想获得一个查找表,它将为我提供与给定标签相关的所有帖子,因此我使用以下代码:

return dataContext.PostTags.ToLookup(pt => pt.Tag, pt => pt.Post);

在单元测试中一切正常,但在实际应用程序中,它不起作用。我发现我的单元测试和我的应用程序之间有不同的加载选项。

dataContext.DeferredLoadingEnabled = true;,一切都很好并且按预期工作,但是当dataContext.DeferredLoadingEnabled = false;您没有从PostTagstoPost和的加载选项时Tag,返回的查找包含单个键(null),其中包含一个空数组作为值。生成的 SQL 是

SELECT [t0].[PostID], [t0].[TagID]
FROM [dbo].[PostTags] AS [t0]

因此,当它生成查找时,pt => pt.Post返回null,标签也是如此。

为什么在这种情况下 Linq2SQL 提供程序不能生成正确的 SQL?

澄清:通过正确的 SQL,任何将返回正确的 Post 和 Tag 对象并允许对它们进行正确分组的 SQL。

4

1 回答 1

1

无论 DeferredLoadingEnabled 属性值是什么以及 loadoptions 是什么,我都找到了一种让它工作的方法:

var lookup = (from pt in dataContext.PostTags
              select new {pt.Post, pt.Tag}).ToLookup(x => x.Tag, x => x.Post);
于 2009-11-12T19:44:00.590 回答