Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 连接多个表时避免linq查询中的重复记录_Sql Server_Wpf_Linq_Entity Framework - Fatal编程技术网

Sql server 连接多个表时避免linq查询中的重复记录

Sql server 连接多个表时避免linq查询中的重复记录,sql-server,wpf,linq,entity-framework,Sql Server,Wpf,Linq,Entity Framework,我的数据库中有以下选项卡 TestPack { id, name, type } Documentation { id, tp_id, date, rev } Flushing { id, tp_id, date, rev } tp_Id是TestPack Id,是文档和刷新表中的外键,这意味着TestPack可能有1-N个文档和刷新 现在我想使用EF LINQ查询数据库,以返回测试包,以及它们的所有文档和针对一个测试包的刷新,这样我就可以在单个数据网格中显示所有这些信息了 没有任何文档/冲洗

我的数据库中有以下选项卡

TestPack { id, name, type }
Documentation { id, tp_id, date, rev }
Flushing { id, tp_id, date, rev }
tp_Id是TestPack Id,是文档和刷新表中的外键,这意味着TestPack可能有1-N个文档和刷新

现在我想使用EF LINQ查询数据库,以返回测试包,以及它们的所有文档和针对一个测试包的刷新,这样我就可以在单个数据网格中显示所有这些信息了

没有任何文档/冲洗的测试包也应显示在结果中

这是我到目前为止写的问题

这是查询的结果

基本上在我的测试包表中,我有两个测试包。 测试包1有2份文件和2份冲洗记录,而测试包2只有1份文件和1份冲洗记录。
所以我在这里关心的是testpack1显示了四行,它不应该显示两行吗?因为测试包有两个冲洗和一个测试包的两个文档。那么所有这些都应该显示在两行中?为什么它们显示为四行?我怎样才能纠正这种行为呢?

我也陷入了这种困境。这是我的方法:

foreach (var tp in allTestPacks)
        {
            var lstAllFlh = allFlushings.Where(m => m.TpID == tp.IDTP).ToList();
            var lstAllDoc = allDocumentation.Where(m => m.TpID == tp.IDTP).ToList();
            foreach (var flh in lstAllFlh)
                lstResult.Add(new { TPID = tp.IDTP, TPName = tp.Value, DocName = lstAllDoc.Skip(lstAllFlh.FindIndex(f => f == flh) % lstAllDoc.Count).First().Value, FlushName = flh.Value });
        }

我希望该查询返回四项。在测试包1的情况下,您将所有测试包加入到所有文档中,这将在tpDoc中产生2项。然后你加入了tpDoc的所有Flushings;所有Flushings有两项用于测试包1;2乘2等于4。冲洗和文件编制是否相互关联?根据您的期望,对于测试包1,查询应该只返回两行,我认为这两行之间一定存在某种关系;可能是rev字段,也可能是rev和date字段。
foreach (var tp in allTestPacks)
        {
            var lstAllFlh = allFlushings.Where(m => m.TpID == tp.IDTP).ToList();
            var lstAllDoc = allDocumentation.Where(m => m.TpID == tp.IDTP).ToList();
            foreach (var flh in lstAllFlh)
                lstResult.Add(new { TPID = tp.IDTP, TPName = tp.Value, DocName = lstAllDoc.Skip(lstAllFlh.FindIndex(f => f == flh) % lstAllDoc.Count).First().Value, FlushName = flh.Value });
        }