一千萬個為什麽

搜索

幫我構建一下這個Linq語句

應該有一個簡單的Linq查詢我想要完成的事情,但我正在制作一些醜陋的代碼。

我有兩個表,一個是問題,另一個是問題狀態。問題和問題狀態之間存在一對多的關系。創建問題時,還會創建一個IssueStatus,並在關閉時將狀態字段設置為“打開”,創建另一個IssueStatus,並將狀態字段設置為“已關閉”...但可以重新打開問題。看起來我應該能寫出這樣的東西:

    public static List FindOpenIssues(this IList issues) {
        return (
            from issue in issues
            from issueStatus in issue.issueStatus.OrderByDescending(x=>x.CreatedOn).Single() 
            where issueStatus.Status == "Open"
            select issue
            ).ToList();
    }

這顯然失敗了,但必須有一個幹凈的方法來做到這一點?謝謝!

編輯:正如裏德科普西指出的那樣,我的目的是找到當前的未決問題。一個問題可能包含一個元素“Open”,並在以後的日期,一個元素“Closed”...這就是為什麽一個簡單的Where ==“Open”將無法工作,它需要找到具有最新日期的元素在列表中確定問題的狀態。

最佳答案

您似乎正在嘗試查找狀態為“打開”的問題。如果是這樣,這應該工作:

public static List FindOpenIssues(this IList issues) {
    return issues
              .Where(i => i.issueStatus.Any(stat => stat.Status == "Open")
              .ToList();
}

這與您的原始版本不同,但根據方法名稱,我認為實際上可能會提供預期的結果(任何存在Open狀態的問題)。

您可以執行原始文件返回的內容,如下所示:

public static List FindOpenIssues(this IList issues) {
    return issues
            .Where(i => i.issueStatus
                            //This potentially should be (I left your original logic, though):
                            //.OrderByDescending(stat => stat.CreatedOn)
                             .OrderBy(stat => stat.CreatedOn)
                             .First()
                             .Status == "Open"
                  )
            .ToList();
}

轉載註明原文: 幫我構建一下這個Linq語句