如何创建linq查询以将行连接到字符串?

时间:2015-11-06 14:23:13

标签: asp.net-mvc linq-to-entities

我有一个包含以下字段的表:

Id名称得分事件

(约翰一书2 3) (2约翰福音4 3) (3约翰5 3)

我希望得到以下结果:

(John,“2 + 4 + 5”,11(总分))

我正在尝试将结果组合在一起以字符串格式显示总和,然后显示总和结果。 任何人都可以帮我解决这个问题。 谢谢, 弗朗西斯科

3 个答案:

答案 0 :(得分: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 to SQL不支持对string.Join()的调用。我不确定,但您可以通过拨打AsEnumerable()替换它。

答案 1 :(得分: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

答案 2 :(得分:0)

在使用toList()string.Format等方法之前,您需要调用string.Join方法,因为Linq to 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();

我无法检查代码是否正确因此我留给您,无论如何,如果您在内存中有List,则可以将Linq支持的方法应用于实体。