Агрегирование в цикле foreach - PullRequest
3 голосов
/ 30 ноября 2009

У меня есть цикл:

<% foreach (User usedBy in discountDto.UsedBy)
   { %>
     <%=usedBy.FullName%><br />
<% } %>

, который часто создает несколько строк с одинаковым именем:

Bob Smith
Mark Thomas
Mark Thomas
Steve Jones

Я хотел бы объединить несколько строк в одну строку, за которой следует целое число, представляющее число раз, когда это имя встречалось:

Bob Smith
Mark Thomas (2)
Steve Jones

Ответы [ 4 ]

9 голосов
/ 30 ноября 2009

Прошу прощения за форматирование - неверные инструменты "в руки" ...

foreach (User usedBy in discountDto.UsedBy.GroupBy(x => x.FullName))
{
    var count = usedBy.Count();
  %><%=usedBy.Key%><%
       if(count>1) %><%=" (" + count + ")"%><%
     %><br />
<% } %>
1 голос
/ 30 ноября 2009

Как-то так у меня сработало

foreach (var item in list.GroupBy(u => new {u.Surname, u.FirstName}))
{
    %>
    <%=Html.Encode(item.Key.FirstName)%>
    <%=Html.Encode(item.Key.Surname)%>
    <%
    if (item.Count) > 1)
    {
        %>
        (<%=item.Count%>)
        <%
    }
}
1 голос
/ 30 ноября 2009
var aggregatedUsers=from users in discountDto.UsedBy
                                    group user by user.FullName into result
                                    select new 
                                        {
                                            User=result.Key,
                                            Count= result.Count(),
                                        };
0 голосов
/ 30 ноября 2009

Попробуйте: извините за плохой синтаксис ... мой Asp.Net ржавый, надеюсь, вы поняли ...

  <% 
   Dictionary<string,int> counts = new Dictionary<string, int>();
   foreach (User usedBy in discountDto.UsedBy)   
   { %>
        <%if (counts.Contains(usedBy.FullName)) counts[usedBy.FullName]++; 
          else counts.Add(usedBy.FullName, 1);       
   } %>
   <% foreach(string usdBy in counts)
   { %> 
      <%=usdBy%><br /><% 
      <%if (counts[usdBy] > 1) 
        {%>
           (<%=counts[usdBy];%>) <%
        }%>
   } %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...