我正在嘗試使用 LINQ 來構建按其存盤首選項排序的記錄,并具有與每個 CompletionStatusFlag 關聯的應用程式串列。為了做到這一點,我的第一個想法是讓記錄保存一個 StorePreference,然后有一個字典,它根據 CompletionStatus 分離應用程式。
員工申請
public class EmployeeApplication
{
public int Id { get; set; }
public StorePreference { get; set; }
public CompletionStatusFlag CompletionStatus { get; set; }
}
應用計數記錄
public class ApplicationCountRecord
{
public Store StorePreference { get; set; }
public Dictionary<CompletionStatusFlag, List<EmployeeApplication>> StatusApplicationPairs { get; set; }
= new Dictionary<CompletionStatusFlag, List<EmployeeApplication>>();
public int TotalCount => StatusApplicationPairs.Count();
}
嘗試創建字典時會出現問題。我保存了完成狀態,但是如何獲取與完成狀態匹配的當前應用程式以便將它們傳遞到字典中?
public void ConvertAppsToResults()
{
var applications = _appRepo.Query()
.GroupBy(x => new { x.StorePreference, x.CompletionStatus })
.Select(y => new ApplicationCountRecord()
{
StorePreference = y.Key.StorePreference,
//Somehow create dictionary here.
});
}
這是另一個甚至無法編譯的錯誤嘗試,但它可能會幫助您了解我的思考程序。
public void ConvertAppsToResults()
{
//get apps in DateFilter range, and creates records seperated by StorePreference, and CompletionStatus
var applications = _applicationRepo.Query()
.GroupBy(x => new { x.StorePreference1, x.CompletionStatus })
.Select(y => new ApplicationCountRecord()
{
StorePreference = y.Key.StorePreference,
StatusApplicationPairs = new Dictionary<CompletionStatusFlag, List<EmployeeApplication>>()
.Add(y.Key.CompletionStatus, y.Where(x => x.CompletionStatus == y.Key.CompletionStatus).ToList());
});
}
uj5u.com熱心網友回復:
這里有一個雙重分組,這可能是你困惑的根源
employeeApplications
.GroupBy(ea => ea.Store)
.Select(g => new ApplicationCountRecord()
{
StorePreference = g.Key
StatusApplicationPairs = g.GroupBy(ea => ea.CompletionStatus).ToDictionary(g2 => g2.Key, g2 => g2.ToList())
}
)
假設您有 100 個 EmployeeApplications,跨越 10 個 Store,每個狀態有 5 個狀態和 2 個應用程式。2 個應用 * 5 個狀態 * 10 個商店 = 100 個應用
GroupBy(Store)獲取您的串列,例如 100 個 EmployeeApplications(每個商店 10 個)并將其分組為 10 個 IGrouping,每個 IGrouping 在概念上都是 10 個 EmployeeApplications 的串列。Store1 的 10 IGrouping、Store2 的 10 IGrouping 等。
Select運行 10 個分組,并且在每個分組上(g記住,其行為類似于 EmployeeApplications 串列,它們都具有相同的 Store ,在 例如“Store 1”的 10 個 EA 被分成 5 個 IGrouping(5 個狀態),每個內部分組中有 2 個 EA,然后對 Store 2、3 等執行相同的程序。因此有 5個,每個一個5 個狀態中的一個,每個狀態有 2 個 EAg.KeyGroupBy(CompletionStatus)gg2.Keyg2
ToDictionary在分組后呼叫,因此您會得到一個包含 5 個鍵的字典,每個鍵與 2 個應用程式的串列相關。ToDictionary需要兩個引數;鍵使用什么(g2.Key是 a Status)和值使用什么(g2.ToList()實作 a List<EmployeeApplication>)
= new Dictionary<CompletionStatusFlag, List<EmployeeApplication>>();在 AppCountRecord 中是不必要的,因為無論如何它都會被替換
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/453235.html
標籤:C# 林克 sql-order-by
上一篇:將此sql查詢轉換為LINQ查詢
