使用LINQ从对象数组填充控件

时间:2014-05-14 13:19:05

标签: c# linq

我只是想找到一种更好的方法来填充一些RadioButtonList控件。 usercontrol.ascx上有一定数量的这些。代码是我目前正在使用的,但我对Linq仍然不是很好,并且想知道是否有更好的方法来做到这一点。

    quizId1 = quiz.Items[0].questionId;
    pTag1.InnerText = quiz.Items[0].QuestionText;
    foreach (Question q in quiz.Items[0].AnswerChoice)
    {
        radiobuttonlist1.Items.Add(new ListItem(q.Value, q.answerId));
    }

对于radiobuttonlist2相同,但使用Items [1]等。

    quizId2 = quiz.Items[1].questionId;
    pTag2.InnerText = quiz.Items[1].QuestionText;
    foreach (Question q in quiz.Items[1].AnswerChoice)
    {
        radiobuttonlist2.Items.Add(new ListItem(q.Value, q.answerId));
    }

抱歉,InnerText是服务器端' P' tag,pTag1,pTag2等

3 个答案:

答案 0 :(得分:1)

我假设您想使用ling来填充几个控件,而不是单个控件。

Linq用于查询,而非更新。要进行更新,您仍需要forforeach个循环。

如果你的RadioButtonList个对象在一个集合中,你可以循环遍历它们:

var radioList = new [] {radiobuttonlist1, radiobuttonlist2, ...};
for(int i = 0; i < quiz.Items.Length; i++)
{
    var quizId = quiz.Items[i].questionId;
    radioList[i].InnerText = quiz.Items[i].QuestionText;
    radioList[i].Items.AddRange(quiz.Items[i]
                                    .AnswerChoice
                                    .Select(q => => new ListItem(q.Value, q.answerId))
                                    .ToArray()
                                );
}

或使用其他人建议的DataSource

var radioList = new [] {radiobuttonlist1, radiobuttonlist2, ...};
for(int i = 0; i < quiz.Items.Length; i++)
{
    var quizId = quiz.Items[i].questionId;
    radioList[i].InnerText = quiz.Items[i].QuestionText;
    radioList[i].DataSource = quiz.Items[i].AnswerChoice;
    radioList[i].DataTextField = "Value";
    radioList[i].DataValueField = "answerId";
}

但是没有Linq方式填充几个控件。

答案 1 :(得分:1)

试试这个

var listItems = (from x in quiz.Items[0].AnswerChoice
                          select new ListItem { Text = q.Value, Value = q.answerId }
                        ).ToList<ListItem>();

                radiobuttonlist1.DataSource = listItems;
                radiobuttonlist1.DataBind();

答案 2 :(得分:0)

我想你可以这样做:

var listItems = from q in quiz.Items[0].AnswerChoice
                select new ListItem(q.Value, q.answerId);
radioButtonlist1.Items.AddRange(listItems.ToArray());

虽然我不确定除了体验LINQ之外还有什么可以买到的......