繁体   English   中英

如何修复“无法将类型System.Collections.Generic.List <>隐式转换为System.Collections.Generic.List <>”

[英]How to fix 'Cannot implicitly convert type System.Collections.Generic.List<> to System.Collections.Generic.List<>'

谁能告诉我为什么我无法在GetWorkOrdersByLocation中返回workOrders? 这是我的控制器:

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语句return workOrders上遇到错误。 我不确定为什么这行不通。 我从模型类WorkOrder中创建列表WorkOrder的新实例。 现在,我试图列出所有位置。

您的代码有几个问题:

  1. GetWorkOrdersByLocation您定义了一个List<WorkOrder> workOrders并尝试为其分配一个List<string>因为LocationId的类型为string。
  2. GetWorkOrdersByLocation您只有一个空的workOrders列表,因此对它的任何选择也将返回空。
  3. WorkOrders似乎类似于GetWorkOrdersByLocation ,但是创建了一个不提供任何数据的View,因为尽管您调用GetWorkOrdersByLocation ,但是它返回的内容却不做任何事情。
  4. 一个较小的(?)名称, GetWorkOrdersByLocation的命名与您返回工作订单位置而不是按位置(按顺序排序/分组)的工作看上去并不完全匹配。

通常,您需要一种提供数据的方法。 GetWorkOrders似乎可以做到这一点,但是您返回一个View,而不是数据。 此方法应仅返回列表,然后由WorkOrdersGetWorkOrdersByLocation

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); 
}

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>在这种情况下是一种方法。 您可能还会为您的位置创建一个类,因为这些位置通常是带有ID,短名称(如州缩写),长名称,描述等的单独对象,并带有适当的命名属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM