基本纲要。我试图根据TestRunId获取TestSuiteExecutions列表。因此,我需要根据TestSuiteId和TestRunId进行搜索,以根据执行的TestRun获取TestSuiteExectuions的列表。请注意,TestSuiteExecutionId可能没有关联的TestRunExecutionId,这只是意味着它被排除在搜索之外。
我遇到的问题是主表缺少TestRunId,所以我需要找到/连接该关联或通过多次搜索自己制作(我不想为了效率而做)
类似的东西;
from t in testSuiteExecutionsTable
where t.testSuiteId == testSuiteId && t.testRunId == testRunId
select t).ToList();
TestSuiteExecutions表包含以下信息,
TestSuiteExecutionId TestSuiteId TestRunExecutionId
-------------------- ----------- ------------------
990 1 100
991 2 NULL
992 3 102
993 1 103
问题是为了完成搜索,我需要关联的TestRunId。有一个单独的表,其中包含相关的TestRunExecutionId和TestRunId,如下所示
TestRunExecutionsTable
TestRunExecutionId TestRunId
-------------------- -----------
100 1
102 2
103 1
我一直在读SQL连接,在一个完美的世界中,我将能够使用以下列创建一个临时表来执行我的查询,
TestSuiteExecutionId TestSuiteId TestRunExecutionId TestRunId
-------------------- ----------- ------------------ ---------
990 1 100 1
991 2 NULL NULL
992 3 102 2
993 1 103 1
这样我就可以在TestSuite运行哪个TestRuns之间建立连接,并且能够得到我的TestSuiteExecutions集合。两个表之间的连接桥是TestRunExecutionId,但我不确定如何使用哪种类型的连接,或者如何以LINQ格式写出连接
答案 0 :(得分:2)
您可以使用存在量词来表达您的查询,如下所示:
var res = dbContext.TestSuiteExecutionsTable.Where(e =>
e.TestSuiteId == testSuiteId && dbContext.TestRunExecutionsTable.Any(r =>
r.TestRunId == testRunId && r.TestRunExecutionId == e.TestRunExecutionId
)
).ToList();
这适用于1:1和1:许多关系,大致对应于下面的SQL:
SELECT *
FROM TestSuiteExecutionsTable e
WHERE e.TestSuiteId = @testSuiteId
AND EXISTS (
SELECT *
FROM TestRunExecutionsTable r
WHERE r.TestRunId = @testRunId AND r.TestRunExecutionId = e.TestRunExecutionId
)
答案 1 :(得分:2)
对此进行盲目攻击,但LINQ中有~=
。
显然你需要纠正你的Context属性,但这应该没有太多的小问题。
join
如果你需要from suite in Context.TestSuiteExecution
join run in Context.TestRunExecution on suite.TestRunExecutionId equals run.TestRunExecutionId
select new
{
TestSuiteExecutionId = suite.TestSuiteExecutionId,
TestSuiteId = suite.TestSuiteId,
TestRunExecutionId = suite.TestRunExecutionId,
TestRunId = run.TestRunId
}
跑步,你应该能够做到这一点:
LEFT JOIN