c# – Linq在加入时返回了太多结果
在我的架构中,我有两个数据库表.关系和关系_会员.我试图从关系表中检索其中包含特定成员的所有条目,因此必须将其与relationship_memberships表连接.我的业务对象中有以下方法:
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()执行时,结果列表有2个问题: 1)结果列表包含6条记录,所有类型都是DBMappings.relationships().在进一步检查时,每个真实关系记录有2个,两者都是彼此的精确副本. 2)返回所有关系,即使m.obj_id == 3,即使objId变量正确传入2. 任何人都可以看到发生了什么,因为我花了2天时间查看这段代码,我无法理解错误.我加入其他似乎工作得很好的linq查询,我的单元测试显示它们仍在工作,所以我必须做错了.好像我需要额外的一双眼睛在这一个:) 编辑:好吧所以似乎整个问题是我设计我的单元测试的方式,因为单元测试实际上没有为记录分配ID值,因为它没有击中sql(用于单元测试). 将下面的答案标记为答案虽然我喜欢他更好地加入它的方式. 解决方法
试试吧
public IList<DBMappings.relationships> GetRelationshipsByObjectId(int objId) { var results = (from m in _context.Repository<DBMappings.relationship_memberships>() where m.rel_id==objID select m.relationships).ToList(); return results.ToList<DBMappings.relationships>(); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |