如何将IEnumerable <int>转换为Int32 </int>

时间:2012-10-23 21:43:55

标签: c# linq

我有一个linq查询将返回1个结果,这将是一个整数。我想将它分配给一个Int32变量以便稍后使用,但是我得到一个错误,它读取“int不包含RatingNumber的定义而且没有扩展方法可以找到类型为int的第一个参数的RatingNumber(你是否遗漏了) using指令或程序集引用?)

这是调用查询的代码

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将结果转换为int,这消除了编译错误,但是这会创建一个InvalidCastException。有人有什么想法吗?

感谢您的帮助

克雷格

3 个答案:

答案 0 :(得分:20)

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中的第一个值,如果Enumberable为空,则返回0。

答案 1 :(得分:3)

如果您有List<Int32>,理论上您不止一个。您可以使用First()Last()Single()从该列表中提取单个元素。它们都有OrDefault()版本,如果列表为空则返回0 - 否则它们会出错。

答案 2 :(得分:0)

您不能使用Single或First方法隔离单个Int32吗?当你需要时,IEnumerable隐含很多。