2

我有一个看起来像这样的数据库表:

在此处输入图像描述

我正在尝试参考 textboxID 来检索 textboxValue,如下所示:

   public string GetPuzzle(string tid)
   {
       return context.crosswords.First(c => c.TextBoxID == tid).TextBoxValue;
   }

上面的代码(CRUD 类文件)给了我一个错误:System.InvalidOperationException: Sequence contains no elements

我在使用 2 个 for 循环的面板中创建了 100 个文本框,每个文本框都有一个 00-99 的 id,所以我试图将 textBoxValue 附加到循环中文本框的文本中,并参考 textBoxID 作为数据库以上。

下面的代码是我尝试做的,不知道它是否正确:

protected void Page_Load(object sender, EventArgs e)
{      
    for (int i = 0; i <= 9; i++)
    {           
        for (int j = 0; j <= 9; j++)
        {                
            TextBox tb = new TextBox();
            tb.MaxLength = (1);
            tb.Width = Unit.Pixel(40);
            tb.Height = Unit.Pixel(40);
            tb.ID = i.ToString() + j.ToString(); // giving each textbox a different id  00-99 
            Panel1.Controls.Add(tb);
            tb.Enabled = false;

            tb.Text = daoCrossword.GetPuzzle(tb.ID).ToString();
        } 

        Literal lc = new Literal();
        lc.Text = "<br />";
        Panel1.Controls.Add(lc);
    }
}

我正在尝试选择 textboxid = tid 的 textboxvalue 。tid 将是我后面代码中的 tb.ID 并且由于有 100 个循环,每次 tb.ID 都会从 00-99 增加,因此当它到达包含数据库中的值的 ID 时,它将附加文本框值(来自数据库) 到那个文本框等等。

4

3 回答 3

4

当您的查询没有返回任何元素时,将引发该错误。你.TextBoxValue什么都不要求。考虑单独使用.FirstOrDefault(),并检查null,例如:

var crossword = context.crosswords.FirstOrDefault(c => c.TextBoxID == tid);

if (crossword != null) {
    crossword.TextBoxValue;
}
else {
    // error.. not found
}

您的循环可能会导致“减一”错误。

于 2013-06-25T02:17:23.723 回答
1

因为您使用 2 个 for 循环来创建 ID TextBox,所以每个都有一个从 00 到 99 的 ID

但实际上 TextBoxID 列值就像 0,1,2,3,4,5。

生成的 ID 不在 textboxid 列中。

所以这段代码:

return context.crosswords.First(c => c.TextBoxID == tid).TextBoxValue;

错误

于 2013-06-25T02:47:11.780 回答
1

声明 id 的算法中似乎有错误。Linq 查询失败,因为它传递了一个无效的 id

我会检查导致异常的 id。

于 2013-06-25T02:16:42.973 回答