簡體   English   中英

無法在 asp.net mvc 中將類型“System.Collections.Generic.List”隱式轉換為“System.Collections.Generic.IEnumerable”

[英]Cannot implicitly convert type 'System.Collections.Generic.List to 'System.Collections.Generic.IEnumerable error in asp.net mvc

我從下面的代碼中得到錯誤

錯誤 CS0266 無法將類型“System.Collections.Generic.List”隱式轉換為“System.Collections.Generic.IEnumerable<Theme_Hisaab.Models.CustomerLedger>”。 存在顯式轉換(您是否缺少演員表?)

控制器代碼

public class CustomerLedgerController : Controller
{
    // GET: CustomerLedger
    Hisaab_ApplicationEntities7 db = new Hisaab_ApplicationEntities7();

    IEnumerable<CustomerLedger> CustomerLedger = null;
    public ActionResult Index()
    {

        CustomerLedger = (from cus_data in db.Customer_Data
                          join so in db.SalesOrder on cus_data.Customer_ID equals so.SalesOrder_ID
                          join sd in db.SalesOrderDetail on so.SalesOrder_ID equals sd.SalesOrderDetail_ID
                          select new
                          {
                              cus_data.Customer_Name,
                              cus_data.Customer_ID,
                              so.SalesOrder_ID,
                              so.FK_Customer_ID,
                              sd.SalesOrderDetail_ID,
                              sd.SalesOrder_Unit_Price,
                              sd.SalesOrder_Total,
                              sd.FK_SalesOrder_ID,
                              sd.FK_Product_ID
                          }
                           ).ToList();
        return View(CustomerLedger);
    }
}

視圖模型

public class CustomerLedger
{
    public int Customer_ID { get; set; }
    public string Customer_Name { get; set; }
    public int SalesOrder_ID { get; set; }
    public Nullable<int> FK_Customer_ID { get; set; }
    public Nullable<System.DateTime> SalesOrderDelivery_Date { get; set; }
    public string Product_Name { get; set; }
    public Nullable<int> SalesOrder_Quantity { get; set; }
    public Nullable<double> SalesOrder_Unit_Price { get; set; }
    public Nullable<double> SalesOrder_Total { get; set; }
    public int SalesOrderDetail_ID { get; set; }
    public Nullable<int> FK_SalesOrder_ID { get; set; }
    public Nullable<int> FK_Product_ID { get; set; }

    public Customer_Data Customer_Data { get; set; }
    public SalesOrderDetail SalesOrderDetail { get; set; }
    public SalesOrder SalesOrder { get; set; }
}

看法

@model IEnumerable<Theme_Hisaab.Models.CustomerLedger>
....
 <table class="table">
 <tr>
     <th>
        @Html.DisplayNameFor(model => model.Customer_ID)
     </th>
     <th>
         @Html.DisplayNameFor(model => model.Customer_Name)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.SalesOrder_ID)
    </th>
    ....
    <th></th>
</tr>

@foreach (var item in Model) {
<tr>
    <td>
        @Html.DisplayFor(modelItem => item.Customer_ID)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Customer_Name)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.SalesOrder_ID)
    </td>
    ....
    <td>
        @Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
        @Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey      */ }) |
        @Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
    </td>
</tr>
}
</table>

您的列表IEnumerable<CustomerLedger> CustomerLedger = null; IEnumerable<CustomerLedger>類型,也是視圖中用作@model IEnumerable<Theme_Hisaab.Models.CustomerLedger>因此您需要從控制器傳遞相同類型的視圖,以便使查詢返回類型.AsEnumerable() 還要在您的選擇語句中創建 和 。 目前您正在選擇一個匿名對象類型,但您需要選擇CustomerLedger類型。 我不知道你確切的數據庫結構,但我已經展示了一種你可以解決它的方法

CustomerLedger = (from cus_data in db.Customer_Data
                          join so in db.SalesOrder on cus_data.Customer_ID equals so.SalesOrder_ID
                          join sd in db.SalesOrderDetail on so.SalesOrder_ID equals sd.SalesOrderDetail_ID
                          select new CustomerLedger
                          {
                              Customer_ID = cus_data.Customer_ID,
                              Customer_Name = cus_data.Customer_Name,
                              SalesOrder_ID = so.SalesOrder_ID,
                              FK_Customer_ID = so.K_Customer_ID,
                              SalesOrderDelivery_Date = so.SalesOrderDelivery_Date,
                              Product_Name = sd.SalesOrderDetail_ID,
                              SalesOrder_Quantity = sd.SalesOrderDetail_ID,
                              SalesOrder_Unit_Price = sd.SalesOrderDetail_ID,
                              SalesOrder_Total = sd.SalesOrderDetail_ID,
                              SalesOrderDetail_ID = sd.SalesOrderDetail_ID,
                              FK_SalesOrder_ID = sd.FK_SalesOrder_ID,
                              FK_Product_ID = sd.FK_Product_ID,
                              Customer_Data = sd.Customer_Data,
                              SalesOrderDetail = sd.SalesOrderDetail,
                              SalesOrder = sd.SalesOrder,
                          }).AsEnumerable();

但是使用此屬性創建 ViewModel 的更好方法

public class MyViewModel
{
    public int CustomerID { get; set; }
    public string CustomerName { get; set; }
    public int SalesOrderID { get; set; }
    public int? FKCustomerID { get; set; }
    public int SalesOrderDetailID { get; set; }
    public double? SalesOrderUnitPrice { get; set; }
    public double? SalesOrderTotal { get; set; }
    public int? FKSalesOrderID { get; set; }
    public int? FKProductID { get; set; }
}

然后建模和選擇語句

IEnumerable<MyViewModel> CustomerLedger = null;

select new MyViewModel
    {
        CustomerID = cus_data.Customer_ID,
        CustomerName = cus_data.Customer_Name,
        SalesOrderID = so.SalesOrder_ID,
        FKCustomerID = so.FK_Customer_ID,
        SalesOrderDetailID = sd.SalesOrderDetail_ID,
        SalesOrderUnitPrice = sd.SalesOrder_Unit_Price,
        SalesOrderTotal = sd.SalesOrder_Total,
        FKSalesOrderID = sd.FK_SalesOrder_ID,
        FKProductID = sd.FK_Product_ID
    }

並查看

@model IEnumerable<Theme_Hisaab.Models.MyViewModel>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM