【发布时间】:2014-02-17 15:31:44
【问题描述】:
我试图避免 3 部分连接,并且我想直接访问我的第三个表名称,但我是 linq to sql 的新手,我不确定我需要如何设置一切才能正常工作。我正在做但不想做的一个例子是:
from x in currentLogs
join y in cDataContext.CategoryCountryCategoryTypeMappings
on x.CategoryCountryCategoryTypeMappingID equals y.CategoryCountryCategoryTypeMappingID
join cat in cDataContext.Categories
on y.CategoryID equals cat.CategoryID
where x.Response != 0 && cat.StorefrontID==storeID
select x).Count();
我想做的是:
from x in currentLogs
join y in cDataContext.Categories
on x.CategoryCountryCategoryTypeMappingID equals y.CategoryCountryCategoryTypeMapping.CategoryCountryCategoryTypeMappingID
where x.Response != 0 && y.StorefrontID==storeID
select x).Count();
但是当我遇到错误
cat.CategoryCountryCategoryTypeMapping.CategoryCountryCategoryTypeMappingID
由我的自动生成的 dbml 返回,Sequence 不止一个实体。
我的布局看起来像:
DownloadLog 到 cccmapping 是一对一的,其他都是一对多的。我可能有点搞砸了,但是下载日志记录了一个 cccMapping,因为 cccmapping 有国家类别和类别类型的排列,每个排列都是唯一的。不确定这是否使映射表成为一对一或一对多。我是否设置了我的上下文权限来做我想做的事情?
【问题讨论】:
-
为什么要避免 3 表连接?在无论如何都必须发生的场景下
-
它可能很琐碎,但代码简单/可读。如果 cccMappings 有一个类别,并且该类别有一个名称,那么在代码中说 cccMappings.categories.select(...).Name 是有意义的
-
你为什么不使用像
Category.CategoryCountryCategoryTypeMappings这样应该在类模型中的导航属性呢?您可能根本不需要一个连接。