复合linq查询

本文关键字:查询 linq 复合 | 更新日期: 2023-09-27 18:17:16

我有一个Visual Studio 2008 c# . Net 3.5项目,在Windows 7 x64上使用MySql 5.1.53和MySql Connector/Net 6.4.4。

在我的应用程序中,我正在寻找没有升级或测试用例状态的项目,所以我查询我的数据库为:

var task_query = from task in task_list_.TaskSet
                 from tc in task.TestCases
                 where
                 (task.Upgrade != null && task.Upgrade.Status.Count == 0) ||
                 tc.Status.Count == 0
                 orderby task.Order 
                 select task;

但是,它从不返回任何项。但是,如果我将查询限制为只有升级和如下查询:

var task_query = from task in task_list_.TaskSet
                 where
                 (task.Upgrade != null && task.Upgrade.Status.Count == 0)
                 orderby task.Order 
                 select task;

我发现没有状态的升级。同样,这个查询:

var task_query = from task in task_list_.TaskSet
                 from tc in task.TestCases
                 where
                 tc.Status.Count == 0
                 orderby task.Order 
                 select task;

将成功地找到没有状态的测试用例。

我需要如何改革我的原始linq查询来定位测试用例和升级的状态。Count == 0?

复合linq查询

取两个独立的查询,并使用union将它们组合在一起。

var task_query = from task in task_list_.TaskSet 
             where 
             (task.Upgrade != null && task.Upgrade.Status.Count == 0) || 
             task.TestCases.Any(tc => tc.Status.Count == 0)
             orderby task.Order  
             select task;