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

虽然我完全不确定我是否理解了,但这里有一个可能会朝着你打算做的方向发展的尝试。

我从您的解释和代码中了解到以下内容:

您需要实际生成一个随机数进行比较。我猜你想在确定的值minmax值之间生成一个数字,并选择Kindergarten表中特定字段等于随机数的行。显然这个字段可以被访问Field<int>("")(这有点奇怪,有一行没有行名,你可能想仔细检查这是否正确,或者因为你使用的是强类型数据集,所以像你一样使用成员字段做了IDColumn)。

对于该字段与生成的随机值匹配的第一行,您希望将该行中另一个字段的值检索为sword. 从您当前的代码中不清楚该字段在Kindergarten表中是如何命名的。在下面的建议中,我将通过字符串“sword”来引用它。如果实际上该列的名称不同,您可能需要更改它。

此外,您当前的代码包含一些错误,其中包含您汇总的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 回答