6

整数になる1つの結果を返すlinqクエリがあります。これを後で使用するために 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()して、そのリストから1つの要素を引き出すことができます。それらはすべてOrDefault()、リストが空の場合は0を返すバージョンがあり、そうでない場合はエラーになります。

于 2012-10-23T21:49:42.623 に答える
0

Single または First メソッドを使用して単一の Int32 を分離することはできませんか? 必要な場合、IEnumerable は暗黙的に多です。

于 2012-10-23T21:50:50.380 に答える