【问题标题】:LINQ find all child entities meet requirementsLINQ 查找所有子实体满足要求
【发布时间】:2015-04-17 03:11:25
【问题描述】:

我有一个表请求和一个表任务。 Request to Task 是一对多的关系。在请求中有一个状态。任务中还有一个状态。有时人们将所有任务状态标记为已完成,但未将请求的状态标记为已完成。我需要对其进行一些维护工作。这是我的代码:

List<Request> RequestsNeedsAction = new List<Request>();
var requests = Requests.Where(r => r.RequestStatusID == 2 || 
                                   r.RequestStatusID == 6)
                       .ToList();

foreach (var request in requests)
{
    bool taskAllCompleted = true;
    foreach (var task in request.Tasks)
    {
        if (task.TaskStatusID != 2 && task.TaskStatusID != 5)
        {
            taskAllCompleted = false;
            break;
        }
    }
    if ( taskAllCompleted )
    {
        RequestsNeedsAction.Add( request );
    }   
}

RequestsNeedsAction.Dump();

在 LINQ 或 tsql 中有更简单的方法吗?

【问题讨论】:

    标签: c# linq tsql


    【解决方案1】:

    你可以试试这样的:

    var RequestsNeedsAction = Requests.Where(r => 
        (r.RequestStatusID == 2 || r.RequestStatusID == 6) 
        && !r.Tasks.Any( t => t.TaskStatusID != 2 && t.TaskStatusID != 5)).ToList();
    

    【讨论】:

    • 我只想使用一个查询来获取所有已完成任务的请求,如果我将 Any 更改为 Where,我将获得所有任务。但是,我只想要请求,我该怎么做?
    • @Meidi 重新审视我的回答,我意识到这是完全错误的。你想要的是更新的。请让我知道现在是否可以。提前谢谢你。
    • 我只需要在 r.Tasks.Any...非常感谢!
    • 我还有一个问题。在任务表中有一个名为 UpdatedDate 的列,所以除了这些请求之外,我还想获取最新的 UpdatedDate 任务以及请求。我该如何处理?
    • 您能否为此发布另一个问题,并通过一个示例更清楚地说明您拥有什么以及想要获得什么?只需分享新问题的链接即可。谢谢
    【解决方案2】:

    我认为这就是您要寻找的。您没有在问题中说,但我从代码中推断,如果 RequestStatusId 为 2 或 6,则请求未完成,如果 TaskStatusId 为 2 或 5,则任务完成。

    List<Request> RequestsNeedsAction =
        Requests
        .Where(r => 
            (r.RequestStatusID == 2 || r.RequestStatusID == 6) && 
            r.Tasks.All(t => task.TaskStatusID == 2 || task.TaskStatusID == 5))
        .ToList();
    

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-23
      • 1970-01-01
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多