LinQ Problem

30/09/2008 - 10:51 von Thomas Nüchter | Report spam
Hallo,

ich unternehme gerade die ersten Schritte mit LinQ und bin schon "am
Ende".

Was mache ich falsch? Ich habe folgenden Code geschrieben:

Dim db As New LinQtoSQLDataContext

Dim paw = From p In db.Tbl_User Where p.Anmeldename Me.TxtUsername.Text Select p.PW

If Trim(Me.TxtPassword.Text) = Trim((From p In db.Tbl_User
Where p.Anmeldename = _
Me.TxtUsername.Text Select p.PW).ToString) Then
MsgBox("OK")
Else
MsgBox("Nee")
End If


Obwohl das Ergebnis stimmt wird es immer als falsch Ausgewertet.

Ich weiß keinen Lösungsansatz.

Danke für Eure Hilfe bereits jetzt.

Viele Grüße
Thomas Nüchter
 

Lesen sie die antworten

#1 Elmar Boye
30/09/2008 - 11:51 | Warnen spam
Hallo Thomas,

Thomas Nüchter schrieb:
ich unternehme gerade die ersten Schritte mit LinQ und bin schon "am
Ende".

Was mache ich falsch?



Grundsàtzlich: Versuche nicht alles in eine Zeile zu quetschen,
das kann man morgen, auch nach vielen Schritten mehr nur schwer lesen.
Denn der "Preis für Smart Code" geht am Ende an den, der es sein
Getippse auch nach Jahren noch entziffern kann ;-)

Ich habe folgenden Code geschrieben:

Dim db As New LinQtoSQLDataContext

Dim paw = From p In db.Tbl_User Where p.Anmeldename > Me.TxtUsername.Text Select p.PW

If Trim(Me.TxtPassword.Text) = Trim((From p In db.Tbl_User
Where p.Anmeldename = _
Me.TxtUsername.Text Select p.PW).ToString)



Die Zeile könnte auch geschrieben werden als
If txtPassword.Text = paw.ToString() Then ...

und wenn Du Dir mal die paw.ToString anguckst, so wirst Du sehen
das Du den Abfragetext vergleichst, z. B.:
Console.Writeline("{0} -> {1}", paw.ToString(), paw.GetType())

Denn (From ...) liefert Dir ein DataQuery(Of T).
Und soweit es LINQ (To Objects) angeht, wàre das ein IQueryable(Of T)
bzw. IEnumerable(Of T).
Du mußt also erstmal den Wert abrufen, hier könnte das SingleOrDefault sein:

Using db As New LinQtoSQLDataContext
Dim password As String = (From p In db.Tbl_User _
Where p.Anmeldename = Me.TxtUsername.Text _
Select p.PW).SingleOrDefault()

If Trim(Me.TxtPassword.Text) = Trim(password) Then
MsgBox("OK")
Else
MsgBox("Nee")
End If
End Using

Gruß Elmar

Ähnliche fragen