2015-11-06 51 views
-1

我有具有以下字段的表:如何創建linq查詢將行連接到字符串?

ID名稱得分事件

(約翰一書2 3) (約翰二書4 3) (3約翰5 3)

和我會希望得到以下結果:

(約翰,「2 + 4 + 5」,11(總分))

我想要的結果相結合來展示以字符串格式的總和再展總和結果。 任何人都可以請幫我解決這個問題。 謝謝 弗朗西斯科

回答

0

您需要使用方法,如string.Formatstring.Join前致電toList()方法,因爲它們不會被支持的LINQ到SQL。

你應該修改你的代碼是這樣的:

var group = (from Classificacao in _dbSet.classificacao 
       from Evento in _dbSet.evento 
       where Classificacao.class_id_Evento == id_evento 
       where Evento.id_evento == id_evento 
       group Classificacao by new 
       { 
        Classificacao.class_atletaNome, 
        Classificacao.class_numAtleta, 
        Classificacao.class_atletaEquipa, 
        Classificacao.class_paisAtleta, 
        Evento.even_name, 
        Evento.local.local_nome, 
        Evento.compTipo.CompTipo_name 
       } into g).ToList() 

的想法是在調用方法之前兌現查詢到列表中。

   var model = group.Select(g => new 
       { 
        g.Key.class_numAtleta, 
        g.Key.class_atletaEquipa, 
        g.Key.class_atletaNome, 
        g.Key.class_paisAtleta, 
        class_fianlAtleta = g.Sum(c => c.class_fianlAtleta.Value), 
        class_classGeral = g.Min(c => c.class_fianlAtleta.Value), 
        class_nome = g.Key.even_name, 
        local_nome = g.Key.local_nome, 
        CompTipo_name = g.Key.CompTipo_name, 
        class_40ponto = ((from u in g 
             where u.class_id_Evento == id_evento 
             group u by new 
             { 
              u.class_atletaNome, 
              u.class_fianlAtleta             

             } 
              into k 
              select new 
              { 
               //Score = string.Concat(k.Key.class_fianlAtleta.ToString(), " + ", g.Key.class_atletaNome) 
               Score = string.Format("{0}",k.Key.class_fianlAtleta) 

              })).Select(c=>c.Score).FirstOrDefault()   


       }).OrderBy(c => c.class_fianlAtleta).ThenBy(c => c.class_classGeral)).toList(); 

我不能檢查,如果代碼是正確的,因此我把它交給你了,反正一旦你有你的列表在內存中您可以應用LINQ的支持,以實體的方法。

+0

嗨。你的代碼工作正常。現在string.join工作和string.format工作。最佳。但我還有一個問題:在我的字符串格式中,他總是得到相同的值並重復它。第一次,第二次...再次感謝你 – Francisco

+0

@Francisco,請更好地解釋它,我不明白你的意思是什麼「在我的string.format他總是得到相同的價值,並重復它。可以第一,第二...爲「。 – user449689

+0

您好,例如:一個athelte可能必須在季節多於一個的得分和IDEIA是顯示所有他的得分在季節中具有以下格式的字符串:(5 + 6 + 3),該運動員的。 1ª得分+2ª得分+3ªscore... – Francisco

0

你需要的東西是這樣的:

 var result = table 
      .GroupBy(t => new { t.Name, t.Event }) 
      .ToList() 
      .Select(t => new 
      { 
       Name = t.Key.Name, 
       JoinedScores = string.Join(" + ", t.Select(group => group.Score).ToArray()), 
       TotalScore = t.Sum(group => group.Score).ToString() + " (Total Score)" 
      }).ToList(); 

ToList()方法的第一個電話是必要的,因爲LINQ到SQL將不支持來電string.Join()。我不確定,但可能您可以通過致電AsEnumerable()來替換它。

+0

你好,謝謝你的回答。我已allready嘗試sting.Join,string.format和聚合和allways得到以下錯誤:LINQ to Entities不識別方法'System.String Format(System.String,System.Object)'方法,並且此方法不能翻譯成商店表達。 – Francisco

+0

LINQ to Entities不識別方法'System.String Format(System.String,System.Object)'方法,並且此方法不能轉換爲存儲表達式。 – Francisco

+0

@Francisco我已經看到您的新回覆,我添加了一個新回覆來解釋您要遵循的策略。 – user449689

0

這裏是我的代碼:

var model = (from Classificacao in _dbSet.classificacao 
        from Evento in _dbSet.evento 
        where Classificacao.class_id_Evento == id_evento 
        where Evento.id_evento == id_evento 
        group Classificacao by new 
        { 
         Classificacao.class_atletaNome, 
         Classificacao.class_numAtleta, 
         Classificacao.class_atletaEquipa, 
         Classificacao.class_paisAtleta, 
         Evento.even_name, 
         Evento.local.local_nome, 
         Evento.compTipo.CompTipo_name 
        } into g 

        select new 
        { 
         g.Key.class_numAtleta, 
         g.Key.class_atletaEquipa, 
         g.Key.class_atletaNome, 
         g.Key.class_paisAtleta, 
         class_fianlAtleta = g.Sum(c => c.class_fianlAtleta.Value), 
         class_classGeral = g.Min(c => c.class_fianlAtleta.Value), 
         class_nome = g.Key.even_name, 
         local_nome = g.Key.local_nome, 
         CompTipo_name = g.Key.CompTipo_name, 
         class_40ponto = ((from u in g 
              where u.class_id_Evento == id_evento 
              group u by new 
              { 
               u.class_atletaNome, 
               u.class_fianlAtleta             

              } 
               into k 
               select new 
               { 
                //Score = string.Concat(k.Key.class_fianlAtleta.ToString(), " + ", g.Key.class_atletaNome) 
                Score = string.Format("{0}",k.Key.class_fianlAtleta) 

               })).Select(c=>c.Score).FirstOrDefault()   


        }).OrderBy(c => c.class_fianlAtleta).ThenBy(c => c.class_classGeral);de here