01. december 2010 - 08:24Der er
20 kommentarer og 1 løsning
Count i en LINQ connection
Hvordan kan man counte antal recorder i en LINQ og sætte dette antal = PValue, ud fra denne kode som henter alt fra min db
Public Sub linqdb()
Dim DBconn As New GetProductListDataContext() Dim Q = _ From p In DBconn.GetTable(Of P)() _ Order By p.PName Descending _ Select p MyRep.DataSource = Q MyRep.DataBind() End Sub
Med kunstig intelligens skaber HP’s nye OmniBook X 14 en unik og skræddersyet brugeroplevelse målrettet dem, der ønsker høj ydeevne og intelligente funktioner
Dim DBconn As New GetProductListDataContext() Dim Q = _ From p In DBconn.GetTable(Of Product)() _ Order By p.PName Descending _ Select p MyRep.DataSource = Q MyRep.DataBind() Dim PValue As String = Q.Count() End Sub
eller før MyRep.DataSource = Q synes nemlig ikke den tager noget med over på min side..
Dim DBconn As New GetProductListDataContext() Dim Q = _ From p In DBconn.GetTable(Of Product)() _ Order By p.PName Descending _ Select p Dim L = Q.ToList MyRep.DataSource = L MyRep.DataBind() Dim PValue As Integer = L.Count()
Min code er som flg. og den kommer ikke noget noget Der kommer 4 recorder, men der hvor den skulle skrive tallet 4 skriver den intet.
Public Sub linqdb()
Dim DBconn As New GetProductListDataContext() Dim Q = _ From p In DBconn.GetTable(Of Product)() _ Where p.IsEnabled = "1" _ Order By p.PName Descending _ Select p Dim L = Q.ToList MyRep.DataSource = Q MyRep.DataBind() Dim PValue As New Label PValue.Text = L.Count().ToString()
jeg ved hvad problemet er men hvordan klare jeg det. den Label er inde i min Repeater. Det er vel derfor den ikke kan skrive PValue, medmindre jeg smider den uden for min repeater.
Se nedenstående eksempel for ideer til hvordan det kan løses:
<%@ import namespace="System.Data" %> <%@ import namespace="System.Data.SqlClient" %> <html> <head> <script language="VB" runat="server"> Sub Page_Load(sender As Object, e As EventArgs) Dim con As SqlConnection = New SqlConnection("server=ARNEPC3\SQLEXPRESS;Integrated Security=true;database=Test") con.Open() Dim cmd As SqlCommand = New SqlCommand("SELECT * FROM T1", con) Dim rdr As SqlDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection) myrep.DataSource = rdr myrep.DataBind() For Each ctl As Control In myrep.Items CType(ctl.FindControl("mylbl"), Label).Text = "Det virker" Next End Sub </script> </head> <body> <form runat=server> <table border> <asp:Repeater id="myrep" runat="server"> <ItemTemplate> <tr> <td><%# Eval("F1") %></td> <td><%# Eval("F2") %></td> <td><asp:label id="mylbl" runat="server"/></td> </tr> </ItemTemplate> </asp:Repeater> </table> </form> </body> </html>
I Visual Studio Får jeg ikke fejl ved dette Public Sub linqdb()
Dim DBconn As New GetProductListDataContext() Dim Q = _ From p In DBconn.GetTable(Of Product)() _ Where p.IsEnabled = "1" _ Order By p.PName Descending _ Select p
MyRep.DataSource = Q MyRep.DataBind() For Each ctl As Control In MyRep.Items CType(ctl.FindControl("PValue"), Label).Text = Q.ToList.Count() Next
End Sub
Men når jeg Debug (F5) så System.NullReferenceException was unhandled by user code Message=Objektreferencen er ikke indstillet til en forekomst af et objekt.
Jeg brugte din CType linje men erstattede hele For Each med CType(MyRep.Controls(MyRep.Controls.Count - 1).FindControl("PValue"), Label).Text = Q.ToList.Count()
og det virker 1000 tak og også tak for din tålmodighed med mig....
kunne jeg tage det tal fra CType(MyRep.Controls(MyRep.Controls.Count - 1).FindControl("PValue"), Label).Text = Q.ToList.Count()
og i samme sub sætte det = itemscount så jeg kan bruge det i denne også
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.