Группировка в Entity Framework MVC - PullRequest
1 голос
/ 31 августа 2011

Привет всем, у меня есть список телефонных номеров, выводимых с использованием: -

Контроллер: -

public ActionResult ViewSubRange(int id)
{
    IEnumerable<Number> numbers = context.Numbers.Where(m => m.RangeID == id).ToList();

    return View("SubRange", numbers);
}

Просмотр: -

@model IEnumerable<TelephoneNumberManagement.Models.Number>
<table>
    <tr>
        <th>
            Number
        </th>
        <th>
            Status
        </th>
    </tr>

@foreach (var item in Model)
{
    <tr> 
        <td>@item.Number1</td>
        <td>@item.Status.StatusName</td>
    </tr> 

}

</table>

Это хорошо, однако я заметил, что у нас может быть много выводимых чисел.Мне было интересно, если это возможно, чтобы сгруппировать номера, например, по клиенту.Так что я хочу достичь, это что-то вроде: -

01132210000-01132210999 КЛИЕНТ A

01132211000-01132211009 КЛИЕНТ B

01132211010-01132211029 КЛИЕНТ C

1 Ответ

3 голосов
/ 31 августа 2011

Вы можете определить новую модель представления:

public class MyViewModel
{
    public string StatusName { get; set; }
    public string Numbers { get; set; }
}

, а затем сгруппировать по имени клиента:

public ActionResult ViewSubRange(int id) 
{
    var numbers = context.Numbers
        .Where(m => m.RangeID == id)
        .GroupBy(x => x.Status.StatusName)
        .Select(x => new MyViewModel
        {
            StatusName = x.Key,

            // TODO: could change the format if you will or
            // select the min and max or whatever you need
            Numbers = string.Join("-", x.Select(n => n.Number1)) 
        })
        .ToList();
    return View(numbers);
}

и, наконец, по вашему мнению:

@model IEnumerable<MyViewModel>
<table>
    <tr>
        <th>Number</th>
        <th>Status</th>
    </tr>

    @foreach (var item in Model)
    {
        <tr> 
            <td>@item.Numbers</td>
            <td>@item.StatusName</td>
        </tr> 
    }
</table>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...