Как исправить 'Невозможно неявно преобразовать тип System.Collections.Generic.List <> в System.Collections.Generic.List <>' - PullRequest
0 голосов
/ 15 июня 2019

Может кто-нибудь сказать мне, почему я не могу вернуть workOrders в GetWorkOrdersByLocation?Вот мой Контроллер:

public IActionResult Index()
{
    return View();
}

public IActionResult Privacy()
{
    return View();
}

public IActionResult WorkOrders()
{
    GetWorkOrders();
    return View(); 
}

public IActionResult GetWorkOrders()
{
    List<WorkOrder> workOrders = new List<WorkOrder> ();

    workOrders.Add(new WorkOrder { UserId = 1, LocationId = 
"Philadelphia", Date = DateTime.Now, Reason = "Lights", IsActive = 
true });

    workOrders.Add(new WorkOrder { UserId = 2, LocationId = "Camden", 
Date = DateTime.MinValue, Reason = "Plumbing", IsActive = true });

    workOrders.Add(new WorkOrder { UserId = 3, LocationId = 
"Burlington", Date = DateTime.Now, Reason = "Water", IsActive = 
false });

    workOrders.Add(new WorkOrder { UserId = 4, LocationId = 
"Wilmington", Date = DateTime.MaxValue, Reason = "Lights", IsActive 
= true }); return View(workOrders); 

}

public IActionResult GetWorkOrdersByLocation()
{
    List<WorkOrder> workOrders = new List<WorkOrder>();

    workOrders = workOrders.Select(x => x.LocationId).ToList();

    return workOrders; 

}

Я получаю ошибку в операторе возврата return workOrders.Я не уверен, почему это не работает.Я создаю новый экземпляр списка WorkOrder из моего класса модели WorkOrder.Сейчас я пытаюсь перечислить все места.

Ответы [ 2 ]

2 голосов
/ 15 июня 2019

В вашем коде есть несколько проблем:

  1. В GetWorkOrdersByLocation вы определили List<WorkOrder> workOrders и попытаетесь присвоить ему List<string>, поскольку LocationId имеет тип string.
  2. В GetWorkOrdersByLocation у вас есть только пустой список workOrders, поэтому любой выбранный элемент также будет пустым.
  3. WorkOrders, похоже, похож на GetWorkOrdersByLocation, но создает представление без предоставлениялюбые данные, потому что, хотя вы звоните GetWorkOrdersByLocation, вы ничего не делаете с тем, что он возвращает.
  4. Незначительный (?) один, наименование GetWorkOrdersByLocation на самом деле не соответствует тому, что вы хотитекогда вы возвращаете местоположения рабочих заданий, а не рабочие задания (сортированные / сгруппированные?) по местоположению.

В общем, вам нужен метод, который предоставляет ваши данные.GetWorkOrders, кажется, делает это, но вы возвращаете представление вместо данных.Этот метод должен возвращать только ваш список, который затем используется WorkOrders и GetWorkOrdersByLocation.

public IActionResult WorkOrders()
{
    // get the work order list and return a view on it
    return View(GetWorkOrders()); 
}

private List<WorkOrder> GetWorkOrders()
{
    List<WorkOrder> workOrders = new List<WorkOrder> ();

    workOrders.Add(new WorkOrder { UserId = 1, LocationId = 
"Philadelphia", Date = DateTime.Now, Reason = "Lights", IsActive = 
true });

    workOrders.Add(new WorkOrder { UserId = 2, LocationId = "Camden", 
Date = DateTime.MinValue, Reason = "Plumbing", IsActive = true });

    workOrders.Add(new WorkOrder { UserId = 3, LocationId = 
"Burlington", Date = DateTime.Now, Reason = "Water", IsActive = 
false });

    workOrders.Add(new WorkOrder { UserId = 4, LocationId = 
"Wilmington", Date = DateTime.MaxValue, Reason = "Lights", IsActive 
= true });

 // return the work orders to be used by your view methods
 return workOrders; 
}

public IActionResult GetWorkOrdersByLocation()
{
    // get your work order list and extract all locations
    var locations = GetWorkOrders().Select(x => x.LocationId).ToList();

    // return view on all locations
    return View(locations); 
}

Если вы хотите, чтобы ваш последний метод возвращал представление по всем рабочим заданиям, отсортированным по местоположению, сделайте:

public IActionResult GetWorkOrdersByLocation()
{
    // get your work order list and sort by location
    var sortedByLocation = GetWorkOrders().OrderBy(x => x.LocationId).ToList();

    // return view on all sorted work orders
    return View(sortedByLocation); 
}
1 голос
/ 15 июня 2019

GetWorkOrdersByLocation() на самом деле не получает workOrders из любого места, у него просто есть пустое List<WorkOrder>(); - возможно, вызовите что-то (приватное?), Которое получает что-то откуда-то, а затем return View (workOrders); Я вырезал часть вашего кода из моего примера сосредоточиться только на запросе.

private List<WorkOrder> CreateWorkOrders()
{
    List<WorkOrder> workOrders = new List<WorkOrder> ();

    workOrders.Add(new WorkOrder { UserId = 1, LocationId = 
"Philadelphia", Date = DateTime.Now, Reason = "Lights", IsActive = 
true });
    workOrders.Add(new WorkOrder { UserId = 2, LocationId = "Camden", 
Date = DateTime.MinValue, Reason = "Plumbing", IsActive = true });
    workOrders.Add(new WorkOrder { UserId = 3, LocationId = 
"Burlington", Date = DateTime.Now, Reason = "Water", IsActive = 
false });
    workOrders.Add(new WorkOrder { UserId = 4, LocationId = 
"Wilmington", Date = DateTime.MaxValue, Reason = "Lights", IsActive 
= true }); 
    return workOrders; 
}

public IActionResult GetWorkOrdersByLocation(string locationid)
{
    var workOrders CreateWorkOrders();
    locationWorkOrders = workOrders.Where(x => x.LocationId == locationid).ToList();
    return View(locationWorkOrders); 
}

Вопрос из комментария: «был список» да List<string> был бы один из способов в этом случае. Вы также можете создать класс для своих местоположений, так как часто это будут отдельные элементы с идентификатором, коротким именем (например, сокращением штата), длинным именем, описанием и т. Д. С соответствующими именованными свойствами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...