2012-10-23 12 views
5

Mam kwerendę linq, która zwróci 1 wynik, który będzie liczbą całkowitą. Chcę to przypisać do zmiennej Int32, która ma być później używana, jednak pojawia się błąd, który brzmi: "int nie zawiera definicji dla NumberNumber i żadnej metody rozszerzenia RatingNumber przyjmujący pierwszy argument typu int mógłby zostać znaleziony (czy brakuje ci ? using dyrektywa lub odwołania do zestawu)Jak przekonwertować IEnumerable <int> do Int32

jest to kod, który wywołuje kwerendy

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

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

a to zapytanie:

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

próbowałem za pomocą Convert.ToInt32 do oddania wynik do int, to pozbyło się compili ng błędy, to jednak stworzyło wyjątek InvalidCastException. Ktoś ma jakieś pomysły?

Dzięki za pomoc

Craig

Odpowiedz

19

wyniku kwerendy LINQ nie jest pojedyncza wartość Int, ale IEnumerable. Więc trzeba uzyskać pojedynczą wartość z niego, co w Twoim przypadku jest pierwsza wartość:

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() powróci pierwsza wartość w Enumberable lub powróci 0 jeśli Enumberable jest pusty.

+0

Wygląda na to, że ten będzie działał, potrzebowałem zmienić typ zwracania na int dla metody, ale teraz nie mam żadnych błędów kompilatora –

+0

dzięki za pomoc !! teraz, aby naprawić pozostałe błędy !! –

+0

@CraigSmith - Pozdrawiam! –

3

Jeśli masz List<Int32>, teoretycznie masz więcej niż jeden. Możesz użyć First(), Last() lub Single(), aby wyciągnąć pojedynczy element z tej listy. Wszystkie mają wersje OrDefault(), które zwrócą 0, jeśli lista jest pusta - w przeciwnym razie wystąpi błąd.

0

Nie możesz użyć metody pojedynczej lub pierwszej do wyizolowania pojedynczego Int32? IEnumerable jest nieskończenie wiele, gdy jej potrzebujesz.

Powiązane problemy