2016-09-23 1 views
0

bekam ich eine Codezeile wie folgt:ASP.NET Entity Framework kann nicht implizit Typ umwandeln

ProjectClass pricing = db.Data.Where(model => model.collection == “aaa”); 

aber ich bekomme diese Fehlermeldung:

Cannot implicitly convert type 'System.Linq.IQueryable<ProjectName.Models.ProjectClass>' to 'ProjectName.Models.ProjectClass'. An explicit conversion exists (are you missing a cast?) 

Was mache ich falsch?

Hier ist meine ProjectClass

public class ProjectClass 
    { 
     [Key] 
     public int id { get; set; } 
     [DisplayName("Design")] 
     public string name { get; set; } 
     [DisplayName("Price")] 
     [DisplayFormat(DataFormatString = "{0:n0}")] 
     public int basePrice { get; set; } 
     [DisplayName("Size")] 
     public int sqft { get; set; } 
     [DisplayName("Collection")] 
     public string collection { get; set; } 
     [DisplayName("Hidden")] 
     public bool hidden { get; set; } 
    } 

Antwort

2

Querys für Ergebnisse mit beliebigen Menge Ergebnisse verwenden Where

List<ProjectClass> result = db.Data.Where(model => model.collection == “aaa”).ToList(); 

Querys für nur 0 oder 1 Ergebnis verwenden SingleOrDefault

var result = db.data.SingleOrDefault(model => model.collection == "aaa"); 

Das Ergebnis wird sein null wenn kein Datensatz gefunden

Für die erste passende Datensatz FirstOrDefault

var result = db.data.FirstOrDefault(model => model.collection == "aaa"); 

Das Ergebnis wird null wenn kein Datensatz angepasst verwenden abfragt.

1

Wählen Sie nur ein Element:

ProjectClass pricing = db.Data.Where(model => model.collection == “aaa”).FirstOrDefault(); 
+0

würde, dass mir alle Ergebnisse, bei denen Sammlung würde = aaa oder nur eine Zeile? – user979331

+0

Es wird Ihnen den ersten Artikel geben, der die Bedingung erfüllt. Wenn ein Element nicht übereinstimmt, ist das Ergebnis null. Sehen Sie über FirstOrDefault() https://msdn.microsoft.com/en-us/library/bb340482(v=vs.110).aspx Adn Sie können Unterschiede von First sehen() http://stackoverflow.com/questions/ 1024559/when-to-use-first-and-when-firstordefault-with-linq – kat1330

1
ProjectClass pricing = db.Data.FirstOrDefault(model => model.collection == "aaa"); 

Derzeit sind Sie eine Liste auswählen. Das oben genannte erhält den ersten Gegenstand. Wenn Sie genau einen erwarten, können Sie stattdessen SingleOrDefault verwenden.

Wenn Sie eine Auflistung (Liste) wollen dann materialisieren Sie das Ergebnis mit ToList oder ToArray (gibt es mehr, aber das sind die häufigsten).

List<ProjectClass> pricing = db.Data.Where(model => model.collection == "aaa").ToList(); 
+0

aber ich suche nach allen Artikeln – user979331

0
ProjectClass pricing = db.Data.Where(model => model.collection == “aaa”); 

Der obige Code ist falsch, da Where() die gefilterte Sequenz basierend auf dem Prädikat zurückgibt. Also, Ergebnis ist VIELES NICHT EINZELENDES ELEMENT! Auch wenn Ihre Bedingung innerhalb von Where() für das SINGLE-Element-Ergebnis gilt, wird NIEMALS ein einzelnes Element sein.

Ausnahme wird ausgelöst, weil Preisangabe Variable als einzelne ProjectClass deklariert ist.

Wenn Sie nicht sicher sind, die Sie als Ergebnis erwarten Typ Sie verwenden können:

var pricing = db.Data.Where(model => model.collection == “aaa”); 
Verwandte Themen