Удаление дубликатов из выпадающего списка в MVC - PullRequest
0 голосов
/ 25 октября 2018

Итак, я работал над списком DropDown, и он работает, но у него много повторяющихся электронных писем, я просто хочу видеть отдельные электронные письма ... Поэтому я попытался сделать .Distinct () в классе модели, но это все равно дало мнедубликаты ..

Класс модели:

 public string One_Manager_Email{ get; set; }

 public List<Hello> getManagers()
        {
            var que = (from wr in db.View
                       select new Hello
                       {
                           O_Manager_Email= wr.One_Manager_Email
                       }).Distinct().ToList();
            return que;
        }

Класс контроллера: (Вероятно, именно здесь возникает проблема)

    public ActionResult Index()
        {
            test = new Hello();
            ViewBag.Managers = new SelectList(test.getManagers(), "", "O_Manager_Email");
            return View(test.getStuff());
         }

Просмотр класса:

<div>
    @Html.DropDownList("Managers", ViewBag.Managers as SelectList)
</div>

Любая помощь будет отличной, спасибо!

Ответы [ 3 ]

0 голосов
/ 25 октября 2018

Вам необходимо сгруппировать объекты по свойству, которым вы хотите, чтобы они различались, а затем выбрать первый элемент группировки.

 public List<Hello> getManagers()
        {
            var que = (from wr in db.View
                       select new Hello
                       {
                           O_Manager_Email= wr.One_Manager_Email
                       })
                      .GroupBy(g => g.O_Manager_Email) //group by property
                      .Select(g => g.First()) //take first element from every grouping
                      .ToList();
            return que;
        }

Для получения более подробной информации вы можете увидеть этот постсодержит более подробную информацию о группировке и различается: LINQ's Distinct () для определенного свойства

0 голосов
/ 26 октября 2018

Если вам просто нужен адрес электронной почты, вы можете выбрать просто строку вместо выбора объекта Hello.Если вы выберете объект Hello и попытаетесь отличить вас таким образом, вы, очевидно, получите дублированные элементы.Потому что каждый объект уже уникален.

Я полагаю, вы уже ответили.GroupBy может решить вашу проблему.Однако, если вам действительно не нужен GroupBy, не используйте GroupBy!Это действительно дорогая операция.

В вашем случае вы должны использовать DistinctBy.

var distinctList = list.DistinctBy(x => x.Prop).ToList();

В вашем коде:

        var que = (from wr in db.View
                   select new Hello
                   {
                       O_Manager_Email = wr.One_Manager_Email
                   }).DistinctBy(x=>x.O_Manager_Email).ToList();

О, с точки зрения использования DistinctBy, вы должны импортировать пространство именMicrosoft.Ajax.Utilities.

using Microsoft.Ajax.Utilities;
0 голосов
/ 25 октября 2018

Distinct не будет работать на таких объектах, так как объекты всегда различны, но вы можете попробовать использовать group by в своем запросе, что-то вроде этого:

var que = (from wr in db.View
           group new {wr.One_Manager_Email}
           by new {wr.One_Manager_Email} into grouped
           select new Hello
           {
               O_Manager_Email= grouped.Key.One_Manager_Email
           }).ToList();
return que;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...