复合linq查询

时间:2011-12-09 22:18:31

标签: c# .net mysql linq entity-framework

我在Windows 7 x64上使用MySql 5.1.53和MySql Connector / Net 6.4.4进行Visual Studio 2008 C#.NET 3.5项目。

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

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查询以找到status.count == 0的测试用例和升级?

2 个答案:

答案 0 :(得分:1)

进行两个单独的查询并使用联合来组合它们。

答案 1 :(得分:0)

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;