我手动在dbml设计器上创建了两个表之间的关联,用于1:多关系;两张桌子都有钥匙。当我使用Linq查询它们时,我可以看到子表是父对象的属性&我甚至可以获得该父级的子行数。我甚至看不到的是与子表关联的任何列。我想要做的只包括那些子行与某个过滤条件匹配的父行。
我已经在网上的几个地方看到了这个问题,但每个人都回答说,其中一个表上没有主键(我的两个都是这样)。我认为最简单的解释是图片,所以这里是:
请注意,RowSequence是设计师中PalletJob的一个属性,但在intellisense中没有显示。 正如我所提到的,我可以获得托盘作业的行数(pm.PalledtJobs.Count()。
谢谢!
我通过使用DataLoadOptions对象来指定子对象的过滤条件来解决问题。我还需要在主查询中添加一个测试,以排除没有子行的父行。
System.Data.Linq.DataLoadOptions dlo = new System.Data.Linq.DataLoadOptions();
dlo.AssociateWith<PalletMaster>(p => p.PalletJobs.Where(j => j.PartNumber.StartsWith("LS")));
db.LoadOptions = dlo;
var query = (from pm in db.PalletMasters
where pm.CreatedByUser.Contains(userFilter) &&
pm.PalletStatus.ToString() == "A"
&& pm.PalletJobs.Count() > 0
orderby pm.PalletID descending
select pm).Skip(skipValue).Take(takeValue);
答案 0 :(得分:2)
这是一对多的关系,所以你得到一个ICollection<PalletJob>
,而不是一个。