2012-10-23 56 views
5

我有一個linq查詢將返回1個結果,它將是一個整數。我想分配給一個Int32變量稍後使用,但是我得到一個錯誤,讀取,「int不包含定義的RatingNumber和沒有擴展方法RatingNumber aceding類型的第一個參數可以找到(你是否缺少?using指令或程序集引用)如何將IEnumerable <int>轉換爲Int32

這是調用查詢

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

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

的代碼,這是查詢:

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

我使用Convert.ToInt32投的嘗試導致一個整數,這擺脫了compili ng錯誤,但是這造成了InvalidCastException。有人有主意嗎?

感謝您的幫助

克雷格

回答

19

LINQ查詢的結果是不是一個單一的int值,而是一個IEnumerable。所以,你需要得到一個單一的價值出來,而你的情況是第一個值:

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返回的第一個值,或將返回0,如果Enumberable是空的。

+0

它看起來像這個將工作,我需要改變返回類型爲int方法,但現在我沒有任何編譯器錯誤 –

+0

感謝您的幫助!現在要修復其餘的錯誤! –

+0

@CraigSmith - 乾杯! –

3

如果你有一個List<Int32>,理論上你有不止一個。您可以使用First(),Last()Single()將單個元素從該列表中拉出。它們都有OrDefault()版本,如果列表爲空,它將返回0,否則它們將會出錯。

0

你不能使用Single或First方法來隔離單個Int32嗎? IEnumerable隱含很多,當你需要一個。

相關問題