gpt4 book ai didi

c# - 加入时 Linq 返回太多结果

转载 作者:行者123 更新时间:2023-11-30 14:19:24 25 4
gpt4 key购买 nike

在我的架构中,我有两个数据库表。关系和 relationship_memberships。我正在尝试从关系表中检索其中包含特定成员的所有条目,因此必须将其与 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 条记录,每个成员都绑定(bind)到不同的关系。 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>();
}

关于c# - 加入时 Linq 返回太多结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2799621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com