6

我有一个 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。有人有想法么?

谢谢您的帮助

克雷格

4

3 回答 3

23

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。

于 2012-10-23T21:48:35.540 回答
3

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

于 2012-10-23T21:49:42.623 回答
0

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

于 2012-10-23T21:50:50.380 回答