2012-10-23 39 views
5

Ben bir tamsayı olacak 1 sonuç döndürecek bir linq sorgusu var. Bunu daha sonra kullanılmak üzere bir Int32 değişkenine atamak istiyorum, ancak "int" "Number" için bir tanım içermiyor ve int türünde bir ilk argümanı kabul etmiyor. ? bir kullanarak direktif veya montaj referansı)Nasıl IEnumerable <int> dönüştürebilirsiniz Int32

bu sorgu

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

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

çağrıda bulunan koddur ve bu sorgu geçerli:

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

ben döküm Convert.ToInt32 kullanarak çalıştı int için sonuç, bu compili kurtulmak Hatalar, bu bir InvalidCastException yarattı. Herhangi bir fikri olan var mı? yardım Linq sorgu

Craig

cevap

19

sonuç için

Teşekkür tek sayı değeri ancak bir IEnumerable değildir.

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() Enumberable ilk değeri döndürecektir veya Enumberable boşsa 0 döndürür: Yani sizin durumda ilk değerdir bunun dışında tek bir değeri, almak gerekir.

+0

Bu işe yarayacak gibi görünüyor, yöntem için int türünü değiştirmek gerekiyordu, ama şimdi herhangi bir derleyici hatası yok –

+0

yardım için teşekkürler! şimdi hataların kalanını düzeltmek için !! –

+0

@CraigSmith - Şerefe! –

3

List<Int32>'unuz varsa, teorik olarak birden fazla var. Bu listeden tek bir öğe çekmek için First(), Last() veya Single()'u kullanabilirsiniz. Hepsinin OrDefault() sürümü var, bu liste boşsa 0 döndürür - aksi halde hata yaparlar.

0

Tek bir Int32'yi yalıtmak için Tek veya İlk yöntemleri kullanamaz mısınız? İhtiyacınız olduğunda IEnumerable, çok fazladır.