【发布时间】:2013-06-07 07:23:11
【问题描述】:
我是 linq 的新手。我正在使用 linq 从 datalist 控件中获取 vlaues 并使用该值创建数据表。数据表包含三列。在那里,有时“答案”列包含逗号分隔的数据。
DataTable SaveAnswer = clsSource.SetData();
var df = from DataListItem dli in PollDataList.Items
let z = ((HiddenField)dli.FindControl("IDReqHiddenField"))
let y = ((RadioButtonList)dli.FindControl("rdblstPollOptions"))
let v = ((CheckBoxList)dli.FindControl("CheckBoxListMultiplePollOptions"))
select new
{
PollId=z.Value,
Answered1 = y.SelectedValue,
Answered2=v.Items.Cast<ListItem>().Where(r=>r.Selected)
};
var result = from p in df
select SavePollAnswer.LoadDataRow(
new object[] {
p.PollId,p.Answered1+string.Join( ", ", p.Answered2 ),""
},
false);
SavePollAnswer = result.CopyToDataTable();
这是我的设计
<asp:DataList ID="PollDataList" runat="server" CssClass="poll-preview">
<ItemTemplate>
<asp:HiddenField ID="PollIDReqHiddenField" Value='<%# Eval("PollID") %>' runat="server" Visible="false" />
<asp:Label ID="lblReqQuestionNumber" runat="server" Text='<%# Eval("NoofPollQuestion") %>' Font-Bold="true"></asp:Label><br />
<asp:Label ID="lblRequiredPollQusetion" runat="server" Text='<%# Eval("PollQuestions") %>' Font-Bold="false"></asp:Label>
<asp:Label ID="lblReqNotification" runat="server" ForeColor="Red" CssClass='<%# Eval("PollReq") %>' Text="*" Font-Bold="true"></asp:Label>
<asp:RadioButtonList ID="rdblstPollOptions" DataSource='<%# Eval("PollOptionsReq") %>' runat="server"></asp:RadioButtonList>
<asp:CheckBoxList ID="CheckBoxListMultiplePollOptions" DataSource='<%# Eval("PollOptionsMul") %>' runat="server" RepeatDirection="Vertical" RepeatColumns="1"></asp:CheckBoxList>
</ItemTemplate>
</asp:DataList>
但是我们想要这样的数据表输出
提前致谢!
【问题讨论】:
-
我会用this 说明这一点吗?拆分具有 2 个值的值并添加新的 2 个新行。
-
我想我必须更清楚地解释它......在第一张图片中,您可以看到“PollAnswer”列为“PollID”(36)选择了选项(2,3)。但我需要的输出不应该是这样的(36->2,3)。它应该是 36->2,36->3(你可以在第二张图片中看到)。
-
是的,我明白了。在您构建
new object[]的位置,您需要查看 p.Answered2 是否不为空/空。如果不是,这意味着有一个逗号分隔的值要在单独的行中查看,请使用 p.Answered1 使用新对象执行第一次插入,然后再次使用另一行和 p.Answered2。