使用Linq在单个列上选择distinct,然后使用databind repeater VB.net
这项工作:使用Linq在单个列上选择distinct,然后使用databind repeater VB.net,vb.net,linq,Vb.net,Linq,这项工作: Dim cmdSelect As Data.SqlClient.SqlCommand Dim dtr As Data.SqlClient.SqlDataReader Dim strSelect As String strSelect = "SELECT DISTINCT DVIRDate FROM dbo.tblDVIR " _ & "WHERE (DVIRDate > DATEADD(day, - 30, { fn NO
Dim cmdSelect As Data.SqlClient.SqlCommand
Dim dtr As Data.SqlClient.SqlDataReader
Dim strSelect As String
strSelect = "SELECT DISTINCT DVIRDate FROM dbo.tblDVIR " _
& "WHERE (DVIRDate > DATEADD(day, - 30, { fn NOW() }))"
cmdSelect = New Data.SqlClient.SqlCommand(strSelect, ConDB)
ConDB.Open()
dtr = cmdSelect.ExecuteReader()
'Bind to Repeater
Repeater1.DataSource = dtr
Repeater1.DataBind()
dtr.Close()
ConDB.Close()
<asp:Repeater ID="Repeater1" runat="server" >
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "DvirDate")%>
<br />
</ItemTemplate>
</asp:Repeater>
我得到一个HttpException,“数据绑定:'System.DateTime'不包含名为'DvirDate'的属性。”
有趣的是,当我绑定到一个自动生成columns=true的gridview时,它会工作,并且该列名为“Item”
我只是没有在
databinder.eval
中使用正确的表达式,还是做了其他错误的事情?这在Linq中应该很容易,我已经尝试了在databinder.eval()
中所能想到的一切,我一定遗漏了什么。这两种情况之间有区别。第一种方法是绑定一个DataReader
,因此Eval
方法像reader(“DvirDate”)一样使用它,它可以工作。第二个是创建DateTime
struct的数组。此数组有一个名为Item
的属性,因此自动生成列会带来此列名,但每个项都是DateTime
,并且没有名为DvirDate的属性
您可以通过两种方式解决此问题:
Dim db As New DataContext
Dim sel = From a In db.tblDVIRs _
Where a.DVIRDate > DateAdd(DateInterval.Day, -30, Now()) _
Select a.DVIRDate _
Distinct
Repeater1.DataSource = sel
Repeater1.DataBind()