在我的模式中,我有两个数据库表。关系和relationship_memberships。我试图从关系表中检索所有具有特定成员的条目,因此必须将其与relationship_memberships表一起加入。我在我的业务对象下面的方法:Linq在加入时返回的结果太多
public IList<DBMappings.relationships> GetRelationshipsByObjectId(int objId)
{
var results = from r in _context.Repository<DBMappings.relationships>()
join m in _context.Repository<DBMappings.relationship_memberships>()
on r.rel_id equals m.rel_id
where m.obj_id == objId
select r;
return results.ToList<DBMappings.relationships>();
}
_Context是基于概述here的代码我使用的通用代码库。
问题是我在关系表中有3条记录,并且在成员表中有3条记录,每个成员关系都与不同的关系有关。 2个成员资格记录的obj_id值为2,另一个为3.我试图检索与对象#2相关的所有关系的列表。
当此linq运行时,_context.Repository<DBMappings.relationships>()
返回正确的3条记录,_context.Repository<DBMappings.relationship_memberships>()
返回3条记录。但是,执行results.ToList()时,生成的列表有两个问题:
1)结果列表包含6条记录,所有类型为DBMappings.relationships()。经过进一步检查,每个真实关系记录都有2个,都是相互精确的副本。
2)将返回所有的关系,即使m.obj_id == 3,即使OBJID变量正确传递为2
任何人都可以看到发生了什么,因为我已经了2天在看这段代码和我无法理解什么是错的。我加入了其他的似乎工作得很好的linq查询,而且我的单元测试表明他们仍然在工作,所以我必须在这方面做错了什么。好像我需要在这一个:)
编辑一个额外的一双眼睛:好了,所以它似乎是整个问题是我设计我的单元测试的方式,因为单元测试没有实际分配ID值到记录,因为它没有触及sql(用于单元测试)。
标记下面的答案作为答案,但我喜欢他更好地加入到一起的方式。
似乎能够加入所有的R到所有的m,使得9条记录,然后过滤下降到6条,其中m.obj_id == OBJID,所以它的上子句ISN我认为,没有工作。我们可以得到对象的定义吗?它可能有助于 – pdr 2010-05-10 00:08:09
关系对象只是由dbml生成的sql类的linq。关系表截至目前只有一个ID号和一个名称标签。 – KallDrexx 2010-05-10 12:06:50