簡體   English   中英

LINQ 使用 C# 按查詢分組未給出正確結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM