2012-10-23 31 views
5

Tôi đã có một truy vấn LINQ sẽ trả về 1 kết quả sẽ là một số nguyên. Tôi muốn gán điều này cho biến Int32 để sử dụng sau, tuy nhiên tôi nhận được lỗi đọc, "int không chứa định nghĩa cho RatingNumber và không có phương thức mở rộng RatingNumber đánh chặn đối số đầu tiên của loại int có thể được tìm thấy (bạn đang thiếu a chỉ sử dụng hoặc tham khảo một hội)Làm thế nào để bạn chuyển đổi IEnumerable <int> thành Int32

này là mã mà các cuộc gọi truy vấn

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

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

và đây là truy vấn:

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

tôi đã cố gắng sử dụng Convert.ToInt32 cast dẫn đến một int, điều này đã loại bỏ compili Tuy nhiên, điều này đã tạo ra một InvalidCastException. Ai có ý tưởng gì không?

Thanks for the help

Craig

Trả lời

19

Kết quả của truy vấn LINQ không phải là một giá trị Int duy nhất, nhưng một IEnumerable. Vì vậy, bạn cần phải nhận được một giá trị duy nhất ra khỏi nó, mà trong trường hợp của bạn là giá trị đầu tiên:

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() sẽ trả về giá trị đầu tiên trong Enumberable, hoặc sẽ trở lại 0 nếu Enumberable trống.

+0

Có vẻ như cái này sẽ hoạt động, tôi cần thay đổi kiểu trả về thành int cho phương thức, nhưng bây giờ tôi không có bất kỳ lỗi biên dịch nào –

+0

cảm ơn sự giúp đỡ !! bây giờ để sửa chữa phần còn lại của các lỗi !! –

+0

@CraigSmith - Chúc mừng! –

3

Nếu bạn có List<Int32>, về mặt lý thuyết bạn có nhiều hơn một. Bạn có thể sử dụng First(), Last() hoặc Single() để kéo một phần tử ra khỏi danh sách đó. Tất cả đều có phiên bản OrDefault() sẽ trả về 0 nếu danh sách trống - nếu không chúng sẽ bị lỗi.

0

Bạn không thể sử dụng phương pháp Đơn hoặc Đầu tiên để tách riêng một Int32 đơn lẻ? IEnumerable là hoàn toàn nhiều, khi bạn cần một.

Các vấn đề liên quan