добавить вложенную группу по запросу Linq в класс модели свойств ASP.NET - PullRequest
0 голосов
/ 06 августа 2020

Мне сложно добавить сгруппированную таблицу данных с помощью запроса linq в свойство модели.

Вот моя модель

    public class Ports
        {
            public String city { get; set; }
        }

и вот мой контроллер

    public ActionResult ShipSchedule()
            {
                DatabaseContext db = new DatabaseContext();
                var Ports = new Ports();
                Ports.city = from m in db.ports_data group m by new { m.city } into n select new { n.Key.city }; 
                return View();
            }

Я заменил часть модели на List<> и снова заменил на другую, но эта часть

    Ports.city = (from m in db.ports_data group m by new { m.city } into n select new { newcity = n.Key.city }).ToList(); 

все еще говорит мне, что часть cannot convert type 'system.collections.generic.list<<anonymous type: string newcity>>' to 'system.collections.generic.list<string>'

Кто-нибудь знает правильные способы из этого?

и еще кое-что, я хочу отобразить эту часть в моем представлении в раскрывающемся списке, если у кого-то есть лучшие способы

вот мой взгляд

@model example.Models.Ports
@{
   List<SelectListItem> listItems = new List<SelectListItem>();
   foreach (var mod in Model.city)
   {
                                        
       listItems.Add(new SelectListItem
       {
           Text = mod.ToString(),
           Value = mod.ToString()
       });
   }
                                    
}

@Html.DropDownListFor(model => model.selected, listItems, "-- Select item --")

1 Ответ

1 голос
/ 06 августа 2020

ошибка сообщает вам, что именно не так, у вас есть строка, но вы пытаетесь назначить ей список (два очень разных объекта), вы можете просто:

 public class Ports
    {
        public List<String> cities { get; set; }
    }

, что сделает это строка действительна, но лучше сделать «Порты» списком и использовать его как List<Port>, и каждый порт будет содержать «город» (и все остальные свойства порта).

но в любом случае чтобы получить все порты из базы данных, вы, вероятно, можете сделать:

var ports = db.ports_data.ToList();

, который должен дать вам список со всеми портами в вашей базе данных (нет необходимости создавать этот New Ports() и заполнять его, если вам нужно для группировки по городу это должно быть так же просто, как:

var ports = db.ports_data.GroupBy(x=>x.city).ToList();

в комментарии, который вы упомянули, что вы получаете дубликаты, для этого вам может потребоваться отдельный, но если вам не нужны дубликаты, вы не должны будет добавлять дубликаты в базу данных для начала, поэтому мы коснемся неправильного конца здесь, но в любом случае я считаю, что вам понадобится Distinct (), если в сочетании с выбором вы получите только города, другие, если re - это дубликаты:

var portsCities = db.ports_data.Select(x=>x.city).Distinct().ToList();

, что приведет к List<string> городам, все разные

, как вы можете видеть, у Linq есть много способов получить именно те данные, которые вам нужны, я бы поиграйте с ним и поэкспериментируйте, лучший способ учиться!

Я бы также попытался использовать метод LINQ (как в примерах выше), если вы начинаете, им легче управлять (более объектно-ориентированным), вы можете видеть несколько примеров здесь

...