2016-10-16 4 views
1

Ich habe den Fehler von meinem Code untenkann nicht implizit Typ ‚System.Collections.Generic.List zu‘ System.Collections.Generic.IEnumerable Fehler in asp.net Mvc

Fehler CS0266 kann nicht implizit konvertiert Typ umwandeln 'System.Collections.Generic.List to' System.Collections.Generic.IEnumerable < Theme_Hisaab.Models.CustomerLedger> '. Eine explizite Konvertierung vorhanden ist (möglicherweise fehlt eine Guss?)

-Controller-Code

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

Ansichtsmodell

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

Ansicht

@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> 
+0

Bitte beachten Sie, dass das Model-View-Controller-Tag für Fragen zum Muster dient. Es gibt ein bestimmtes Tag für die ASP.NET-MVC-Implementierung. –

+0

Ihre Abfrage erstellt eine Sammlung anonymer Objekte (die in der Ansicht nicht funktionieren). Sie müssen ein Ansichtsmodell erstellen, das die von Ihnen benötigten Eigenschaften enthält, und die Ergebnisse in eine Sammlung dieses Modells projizieren (mithilfe von 'Select new MyViewModel {CutomerName = cus_data.Customer_Name, ..., SalesOrderID = so.SalesOrder_ID, ..... } ' –

+0

danke @StephenMuecke es funktioniert für mich sehr viel danken und die Logik zu erläutern. –

Antwort

1

Ihre Liste IEnumerable<CustomerLedger> CustomerLedger = null; ist IEnumerable<CustomerLedger> Art und auch mo del in Sicht als @model IEnumerable<Theme_Hisaab.Models.CustomerLedger> verwendet, so müssen Sie den gleichen Typ in Sicht vom Controller übergeben, so dass die Abfrage gibt den Rückgabetyp .AsEnumerable(). Erstellen Sie auch und die in Ihrer Select-Anweisung. Derzeit wählen Sie einen Anonymous-Objekttyp, aber Sie müssen CustomerLedger Typ auswählen. Ich weiß nicht, Ihre genaue Struktur Datenbank, aber ich habe einen Weg zeigen, mit denen Sie ihm

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

Aber besserer Weise lösen können eine Ansichtsmodell unter Verwendung dieser Eigenschaften

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

Dann Modell und select-Anweisung zu erstellen

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 
    } 

und anzeigen

@model IEnumerable<Theme_Hisaab.Models.MyViewModel> 
+0

nicht mir diesen Fehler zeigt –

+0

die Abfrage Rückgabetyp zweiten Weg macht mit' Enumerable' Fehlern zurück? – Mostafiz

+0

jetzt zeigen sie mir diesen Fehler Fehler \t CS0029 \t Kann nicht implizit konvertieren Typ 'System.Collections.Generic.List zu' System.Collections.Generic.List –

Verwandte Themen