微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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>(); 
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐