【问题标题】:How do you convert IEnumerable<int> to an Int32如何将 IEnumerable<int> 转换为 Int32
【发布时间】:2012-10-25 22:30:41
【问题描述】:

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

感谢您的帮助

克雷格

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    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。

    【讨论】:

    • 看起来这个可行,我需要将方法的返回类型更改为 int,但现在我没有任何编译器错误
    • 由于 Int32 是值类型,因此 FirstOrDefault 在可枚举为空时会返回 0 而不是 null,因为它使用 default(T) 而 default(Int32) 为 0。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-03
        • 1970-01-01
        相关资源
        最近更新 更多