2012-10-23 21 views
5

Ich habe eine LINQ-Abfrage, die 1 Ergebnis zurückgeben wird, die eine ganze Zahl sein wird. Ich möchte dies einer Int32-Variable zuweisen, um später verwendet zu werden, jedoch erhalte ich einen Fehler, der lautet: "int enthält keine Definition für RatingNumber und keine Erweiterungsmethode RatingNumber, die ein erstes Argument des Typs int enthält (fehlt Ihnen) ? eine using-Direktive oder ein Assemblyverweis)Wie konvertiert man IEnumerable <int> zu einem Int32

dies ist der Code, der die Abfrage

IEnumerable<int> newRatingNumber = getNewRecipeNumbers.newRatingNum(); 

     foreach (var a in newRatingNumber) 
     { 
      ratingNumber = a.RatingNum; 
     } 

und dies ist die Abfrage ruft:

public IEnumerable<int> newRatingNum() 
    { 
     ratingTableAdapter.Fill(recipeDataSet.Rating); 
     var newRatingNum = (from a in recipeDataSet.Rating 
          where a.UserRating == 0 && 
          a.FamilyRating == 0 && 
          a.HealthRating == 0 && 
          a.EaseOfCooking == 0 && 
          a.CookingTime == 0 
          select a.RatingNum); 
     return newRatingNum; 
    } 

ich versucht, mit Convert.ToInt32 werfen die Ergebnis zu einem int, dies wurde Compili los ng Fehler, dies jedoch eine InvalidCastException erstellt. Hat jemand Ideen?

Danke für die Hilfe

Craig

Antwort

19

Das Ergebnis der Abfrage Linq ist kein einziger Int-Wert, sondern ein IEnumerable. Sie müssen also aus ihm einen einzelnen Wert zu erhalten, die in Ihrem Fall ist der erste Wert:

var newRatingNum = (from a in recipeDataSet.Rating 
         where a.UserRating == 0 && 
         a.FamilyRating == 0 && 
         a.HealthRating == 0 && 
         a.EaseOfCooking == 0 && 
         a.CookingTime == 0 
         select a.RatingNum).FirstOrDefault(); 

FirstOrDefault() wird der erste Wert in der Enumberable zurückzukehren, oder 0 zurück, wenn die Enumberable leer.

+0

Es sieht aus wie dieser wird funktionieren, ich musste den Rückgabetyp zu int für die Methode ändern, aber jetzt habe ich keine Compilerfehler –

+0

danke für die Hilfe !! jetzt um den Rest der Fehler zu beheben !! –

+0

@CraigSmith - Prost! –

3

Wenn Sie eine List<Int32> haben, haben Sie theoretisch mehr als eine. Sie können First(), oder Single() verwenden, um ein einzelnes Element aus dieser Liste zu entfernen. Sie alle haben OrDefault() Versionen, die eine 0 zurückgeben, wenn die Liste leer ist - andernfalls werden sie Fehler.

0

Können Sie nicht die Single-Methode oder die First-Methode verwenden, um einen einzelnen Int32 zu isolieren? IEnumerable ist implizit viele, wenn Sie eine benötigen.

Verwandte Themen