0

アクセス データベース内のテーブルの最小値と最大値の間の数値をランダムに生成してから、その乱数をテーブルに一致させ、そのランダム化された数値に等しい field1column と行を表示しようとしています。乱数ジェネレーターと、テーブルの最小数と最大数を取得するコードを見つけました。番号をテーブルの行と一致させたい。私は c# プログラミングに非常に慣れていないため、プログラミングをよりよく理解しようとしています。これまでの私のコードは、どんな助けでも大歓迎です。コードの太字部分は、コードでエラーが発生した場所です。ご覧いただきありがとうございます。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CapstoneProgram
{
    public partial class SightWordRandom : Form
    {
        public SightWordRandom()
        {
            InitializeComponent();
        }

        private void SightWordRandom_Load(object sender, EventArgs e)
        {

        }

        private void btnNext_Click(object sender, EventArgs e)
        {
            Double sword;



            var answer = this.sightWordsDB1DataSet.Kindergarten.Aggregate(new { Min = int.MinValue, Max = int.MaxValue },
                                                    (a, b) => new
                                                    {
                                                        Min = Math.Min(a.Min, b.Field<int>("")),
                                                        Max = Math.Max(a.Max, b.Field<int>(""))
                                                    });
            int min = answer.Min;
            int max = answer.Max;

            Random rng = new Random();
            for (int i = min; i < max; i++)

               **sword = (this.sightWordsDB1DataSet.Kindergarten.IDColumn == rng);**

                lblSightWord.Text = Convert.ToString(sword);
        }


    }



    }
4

1 に答える 1

0

私が理解しているかどうかはまったく確信が持てませんが、意図した方向に進む可能性がある試みがここにあります。

あなたの説明とコードから次のことを理解しています。

比較する乱数を実際に生成する必要があります。minそして、決定された値と値の間の数値を生成し、特定のフィールドが乱数と等しいテーブルのmax行を選択したいと思います。Kindergartenどうやら、このフィールドには次のようにアクセスできますField<int>("")(これは少し奇妙です。行名のない行を持つには、これが正しいかどうかを再確認するか、厳密に型指定されたデータセットを使用しているため、次のようにメンバー フィールドを使用しますのためにしましたIDColumn)。

このフィールドが生成されたランダム値と一致する最初の行について、その行の別のフィールドの値を として取得したいとしますsword。現在のコードからは、このフィールドがKindergartenテーブルでどのように命名されているかが明確ではありません。以下の私の提案では、文字列「剣」で参照します。実際に列の名前が異なる場合は、変更する必要がある場合があります。

また、現在のコードには、集約したminおよびの初期値に関するいくつかのバグが含まれています。max

だからここに私の提案があります:

private void btnNext_Click(object sender, EventArgs e)
{
    Double sword;

    var answer = this.sightWordsDB1DataSet.Kindergarten.Aggregate(
        new { Min = int.MaxValue, Max = int.MinValue },
        (a, b) => new
        {
            Min = Math.Min(a.Min, b.Field<int>("")),
            Max = Math.Max(a.Max, b.Field<int>(""))
        });

    int min = answer.Min;
    int max = answer.Max;
    Random rng = new Random();

    // The value to be matched.
    var selectedMatchingValue = rng.Next(min, max + 1);

    sword = this.sightWordsDB1DataSet.Kindergarten
        .Where(r => r.Field<int>("") == selectedMatchingValue)
        .Select(r => r.Field<double>("sword")) // change to the correct column name.
        .First();

    lblSightWord.Text = Convert.ToString(sword);
}
于 2013-08-30T02:54:01.737 に答える