[英]LINQ Group by query is not giving correct result using C#
我有 SQL 表數據如下
total candidateStatus Name
5 FULLY PACKAGED cdi
2 FULLY PACKAGED him
5 FULLY PACKAGED cmur
1 FULLY PACKAGED hit
5 FULLY PACKAGED trauma
7 FULLY PACKAGED bmt
8 FULLY PACKAGED odm
5 PACKAGING cdi
1 PACKAGING him
5 PACKAGING cmur
8 PACKAGING hit
5 PACKAGING trauma
4 PACKAGING bmt
1 PACKAGING odm
我有 c# 實體來分配總值
public class RecruiterDivisionWiseDasboardCounts : AbstractDBObject
{
//RecruiterDivisionWiseDasboardCounts
public int total { get; set; }
public string Name { get; set; }
public string candidateStatus { get; set; }
public int CDIPackaging { get; set; }
public int HIMPackaging { get; set; }
public int CMURPackaging { get; set; }
public int HITPackaging { get; set; }
public int TraumaPackaging { get; set; }
public int BMTPackaging { get; set; }
public int ODMPackaging { get; set; }
public int CDIFullypackaged { get; set; }
public int HIMFullypackaged { get; set; }
public int CMURFullypackaged { get; set; }
public int HITFullypackaged { get; set; }
public int TraumaFullypackaged { get; set; }
public int BMTFullypackaged { get; set; }
public int ODMFullypackaged { get; set; }
}
我的 LINQ 查詢無法滿足我的需要
public List<RecruiterDivisionWiseDasboardCounts> GetUsersTroveByDivisionWiseCandidateStatusCount(int createdBY)
{
RecruiterDivisionWiseDasboardFactory RWPD =new RecruiterDivisionWiseDasboardFactory();
List<RecruiterDivisionWiseDasboardCounts> list_WorkingPendingRecruiterDasboardCounts = new List<RecruiterDivisionWiseDasboardCounts>();
List<RecruiterDivisionWiseDasboardCounts> lst=RWPD.GetRelatedObjects("GetUsersTroveByDivisionWiseCandidateStatusCount",createdBY).Select(m => (RecruiterDivisionWiseDasboardCounts)m).ToList();
list_WorkingPendingRecruiterDasboardCounts.AddRange(lst.GroupBy(mc => mc.candidateStatus.ToUpper()).Select(g => new RecruiterDivisionWiseDasboardCounts()
{
candidateStatus = g.Key,
CDIPackaging = g.Where(c => c.Name.ToLower() == "cdi" && c.candidateStatus.ToUpper() == "PACKAGING").Sum(c => c.total),
HIMPackaging = g.Where(c => c.Name.ToLower() == "him" && c.candidateStatus.ToUpper() == "PACKAGING").Sum(c => c.total),
CMURPackaging = g.Where(c => c.Name.ToLower() == "cmur" && c.candidateStatus.ToUpper() == "PACKAGING").Sum(c => c.total),
HITPackaging = g.Where(c => c.Name.ToLower() == "hit" && c.candidateStatus.ToUpper() == "PACKAGING").Sum(c => c.total),
TraumaPackaging = g.Where(c => c.Name.ToLower() == "trauma" && c.candidateStatus.ToUpper() == "PACKAGING").Sum(c => c.total),
BMTPackaging = g.Where(c => c.Name.ToLower() == "bmt" && c.candidateStatus.ToUpper() == "PACKAGING").Sum(c => c.total),
ODMPackaging = g.Where(c => c.Name.ToLower() == "odm" && c.candidateStatus.ToUpper() == "PACKAGING").Sum(c => c.total),
TotalPackaging = g.Where(c => c.candidateStatus.ToUpper() == "PACKAGING").Sum(c => c.total),
//FULLY PACKAGED
CDIFullypackaged = g.Where(c => c.Name.ToLower() == "cdi" && c.candidateStatus.ToUpper() == "FULLY PACKAGED").Sum(c => c.total),
HIMFullypackaged = g.Where(c => c.Name.ToLower() == "him" && c.candidateStatus.ToUpper() == "FULLY PACKAGED").Sum(c => c.total),
CMURFullypackaged = g.Where(c => c.Name.ToLower() == "cmur" && c.candidateStatus.ToUpper() == "FULLY PACKAGED").Sum(c => c.total),
HITFullypackaged = g.Where(c => c.Name.ToLower() == "hit" && c.candidateStatus.ToUpper() == "FULLY PACKAGED").Sum(c => c.total),
TraumaFullypackaged = g.Where(c => c.Name.ToLower() == "trauma" && c.candidateStatus.ToUpper() == "FULLY PACKAGED").Sum(c => c.total),
BMTFullypackaged = g.Where(c => c.Name.ToLower() == "bmt" && c.candidateStatus.ToUpper() == "FULLY PACKAGED").Sum(c => c.total),
ODMFullypackaged = g.Where(c => c.Name.ToLower() == "odm" && c.candidateStatus.ToUpper() == "FULLY PACKAGED").Sum(c => c.total),
TotalFullypackaged = g.Where(c => c.candidateStatus.ToUpper() == "FULLY PACKAGED").Sum(c => c.total),
}));
return list_WorkingPendingRecruiterDasboardCounts;
}
我需要返回單行列表,但此列表返回多個 list_WorkingPendingRecruiterDasboardCounts
我想在 linq 查詢中返回單行列表 output 應該像下面的實體單分配
我想要如下所示的 output 將值分配給實體以返回單個數組以將此值顯示到標簽中
CDIFullypackaged=5
HIMFullypackaged=2
CMURFullypackaged=5
HITFullypackaged=1
TraumaFullypackaged=5
BMTFullypackaged=7
ODMFullypackaged=8
CDIPackaging=5
HIMPackaging=1
CMURPackaging=5
HITPackaging=8
TraumaPackaging=5
BMTPackaging=4
ODMPackaging=1
我的 linq 查詢無法返回上述數據。
根據描述,這里沒有必要成群結隊:
list_WorkingPendingRecruiterDasboardCounts.Add(new RecruiterDivisionWiseDasboardCounts()
{
CDIPackaging = lst.Where(c => c.Name.ToLower() == "cdi" && c.candidateStatus.ToUpper() == "PACKAGING")
.Sum(c => c.total),
HIMPackaging = lst.Where(c => c.Name.ToLower() == "him" && c.candidateStatus.ToUpper() == "PACKAGING")
.Sum(c => c.total),
CMURPackaging = lst.Where(c => c.Name.ToLower() == "cmur" && c.candidateStatus.ToUpper() == "PACKAGING")
.Sum(c => c.total),
HITPackaging = lst.Where(c => c.Name.ToLower() == "hit" && c.candidateStatus.ToUpper() == "PACKAGING")
.Sum(c => c.total),
TraumaPackaging = lst.Where(c => c.Name.ToLower() == "trauma" && c.candidateStatus.ToUpper() == "PACKAGING")
.Sum(c => c.total),
BMTPackaging = lst.Where(c => c.Name.ToLower() == "bmt" && c.candidateStatus.ToUpper() == "PACKAGING")
.Sum(c => c.total),
ODMPackaging = lst.Where(c => c.Name.ToLower() == "odm" && c.candidateStatus.ToUpper() == "PACKAGING")
.Sum(c => c.total),
TotalPackaging = lst.Where(c => c.candidateStatus.ToUpper() == "PACKAGING").Sum(c => c.total),
//FULLY PACKAGED
CDIFullypackaged = lst.Where(c => c.Name.ToLower() == "cdi" && c.candidateStatus.ToUpper() == "FULLY PACKAGED")
.Sum(c => c.total),
HIMFullypackaged = lst.Where(c => c.Name.ToLower() == "him" && c.candidateStatus.ToUpper() == "FULLY PACKAGED")
.Sum(c => c.total),
CMURFullypackaged = lst.Where(c => c.Name.ToLower() == "cmur" && c.candidateStatus.ToUpper() == "FULLY PACKAGED")
.Sum(c => c.total),
HITFullypackaged = lst.Where(c => c.Name.ToLower() == "hit" && c.candidateStatus.ToUpper() == "FULLY PACKAGED")
.Sum(c => c.total),
TraumaFullypackaged =
lst.Where(c => c.Name.ToLower() == "trauma" && c.candidateStatus.ToUpper() == "FULLY PACKAGED")
.Sum(c => c.total),
BMTFullypackaged = lst.Where(c => c.Name.ToLower() == "bmt" && c.candidateStatus.ToUpper() == "FULLY PACKAGED")
.Sum(c => c.total),
ODMFullypackaged = lst.Where(c => c.Name.ToLower() == "odm" && c.candidateStatus.ToUpper() == "FULLY PACKAGED")
.Sum(c => c.total),
TotalFullypackaged = lst.Where(c => c.candidateStatus.ToUpper() == "FULLY PACKAGED").Sum(c => c.total),
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.