![](/img/trans.png)
[英]Cannot implicitly convert type 'System.Collections.Generic.List<AnonymousType#1>' to '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.