簡體   English   中英

轉換表以在C#中的Linq中添加更多列

[英]Transform a table to add more columns in Linq in C#

我在上一篇文章中收到了非常有用的建議: Linq在C#中按2列分組 - 我現在正在嘗試擴展它,以便我的ViewModel看起來應該是視圖的方式:

我的第一個問題:

var qbt = db.Calls.GroupBy(calls => new { calls.assignedteam, calls.status })
            .Select(call => new StatusByTeamViewModel1
        {
            Team = call.Key.assignedteam,
            Status = call.Key.status,
            Number = call.Count()
        }).OrderBy(z => z.Team).ThenBy(z => z.Status);

返回:

Team  Number Status
ta    40     Open
ta    60     Closed
tb    58     Open
tb    40     Closed
tc    1      Open
tc    122    Closed

我想把那個表轉換成:

Team Open Closed
ta   40   60
tb   58   40
tc   1    122

我正在嘗試下面的查詢,但是讓自己混淆了 - 如果打開/關閉列,所有團隊每個只顯示1或0:

        var qbt2 = qbt.GroupBy(x => x.Team)
          .Select(call => new StatusByTeamAllViewModel2
          {
              Team = call.Key,
              Open = qbt2.Where(it => it.Status == "Open" && it.Team==call.Key).Count(),
              Closed = qbt2.Where(it => it.Status == "Closed" && it.Team == call.Key).Count(),

          });

我也在嘗試LinqPad,但很難讓它在內部工作。

謝謝你的幫助,

標記

你在這里有什么甚至不會編譯,因為你在左側定義qbt2 ,並在右側使用它。 現在,假設您在右側表示qbt ,這對GroupBy來說是一個相當低效的實現,然后遍歷整個序列以查找匹配的鍵。 GroupBy已經為您提供了所需的序列元素,因此請使用它。 然后,除了這兩個錯誤之外,您還要計算與給定Team, Status對匹配的行數,而不是將給定對的Number值相加。 從而:

var qbt2 = 
    qbt.GroupBy(x => x.Team)
       .Select(g => new StatusByTeamAllViewModel2 {
           Team = g.Key,
           Open = g.Where(x => x.Status == "Open").Sum(x => x.Number)
           Closed = g.Where(x => x.Status == "Closed").Sum(x => x.Number)
       });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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