【问题标题】:compound linq query复合 linq 查询
【发布时间】:2011-12-09 22:18:31
【问题描述】:

我有一个 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 查询以定位 status.count == 0 的测试用例和升级?

【问题讨论】:

  • tc 是否总是拥有 Status?第一个版本生成的 SQL 是什么样的?
  • @John Skeet - tc.Status 是状态项的集合。该集合中可能有 0 个项目。 task.Upgrade.Status 同样是状态项的集合。我需要一些时间来研究如何回答您的第二个问题,我会尽快回复您。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:
    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; 
    

    【讨论】:

    • 我得到一个EntityCommandExecutionException 例外。 "An error occurred while executing the command definition. See the inner exception for details."InnerException:"Unknown column 'Project1.TaskID' in 'where clause'"
    猜你喜欢
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多