Avatar billede websam Nybegynder
10. marts 2006 - 14:39 Der er 10 kommentarer og
1 løsning

Generic.Exists spørgsmål ?

Hejsa,

Det begynder så småt at hænge ved alt det med Generic's i .Net 2.0 Jeg skal dog lige høre om ikke der er en der kan hjælpe mig med at få nedenstående til at virke fra min Business klasse.

Følgende virker fint i Code-Behind :

'--- Tjekker om email adressen allerede er tilmeldt.
Dim objList As List(Of NewsletterInfo.Info) = objBLL.GetAll()
If objList.Exists(AddressOf FindEmail) Then
    Return True
Else
    Return False
End If

Private Function FindEmail(ByVal objList As NewsletterInfo.Info) As Boolean
    If objList.Email = txt_Email.Text Then
        Return True
    Else
        Return False
    End If
End Function

Men hvordan får jeg lige den indtastede email fra formularen med så jeg kan køre det fra min Business klasse :

Public Function IsExistingEmail(ByVal Email As String) As Boolean Implements NewsletterBLLInterface.IsExistingEmail
    '--- Tjekker om email adressen allerede er tilmeldt.
    Dim objList As List(Of NewsletterInfo.Info) = GetAll()
    If objList.Exists(AddressOf FindEmail) Then
        Return True
    Else
        Return False
    End If
End Function

Private Function FindEmail(ByVal objList As NewsletterInfo.Info) As Boolean
    If objList.Email = "Her skal jeg have et eller andet" Then
        Return True
    Else
        Return False
    End If
End Function

Jeg har forsøgt mig med lidt af hvert men der er ikke rigtigt noget af det der virker.

/Websam
Avatar billede websam Nybegynder
10. marts 2006 - 18:18 #1
Metoden "FindEmail" som kaldes i denne linie :

    If objList.Exists(AddressOf FindEmail) Then

Må ikke indeholde variabler så jeg kan ikke helt se hvorledes jeg skulle kunne sende variablen "Email" med fra min "IsExistingEmail" metode ?

/Websam
Avatar billede snepnet Nybegynder
10. marts 2006 - 20:29 #2
det er jo bare instanscemetoder du har - så du kan vel bare lave dig en klassevariabel hvor du kan holde værdien.
mvh
Avatar billede websam Nybegynder
10. marts 2006 - 20:51 #3
1. ja jeg kan godt lave en klasse variabel i min business klasse, men syntes ikke det rigtigt at det ville passe ind.

2. så måske hellere lave en klasse for sig selv der udelukkende tager sig af alle generic ting som jeg så, uafhænnigt af Design og Business lag kan bruge hvvor det passer mig.

Men den "hurtige" løsning er jo klart en klasse variabel i selve business klassen.

/Websam
Avatar billede websam Nybegynder
10. marts 2006 - 22:10 #4
Det eksempel du kom med for noget tid siden er det ikke lykkedes mig at omskrive og hver gang jeg har søgt noget om det i Vb er jeg rendt på ovenstående løsninger, men hvis dukan finde noget om det i vb skal du være velkommen til at poste et link eller to ;o)

/Websam
Avatar billede websam Nybegynder
11. marts 2006 - 00:13 #5
En helt anden ting, ville det være hurtigere at lade databasen tage sig af arbejdet med at tjekke om der eksistere en Email eller ej frem for at lede i en liste ?

/Websam
Avatar billede websam Nybegynder
11. marts 2006 - 16:43 #6
Smid et svar snepnet så finder jeg ud af  det hen af vejen ;o)

/Websam
Avatar billede jens_klinting Nybegynder
12. marts 2006 - 10:17 #7
Hej,
Noget i stil med nedenstående:

Public Class EMailChecker

  Private _emailToCheck As String
  Private _allInfos As System.Collections.Generic.List(Of NewsletterInfo.Info)

  Public Sub New(ByVal allInfos As System.Collections.Generic.List(Of NewsletterInfo.Info))
    _allInfos = allinfos
  End Sub

  public Function IsExistingEmail(ByVal emailToCheck As String) As Boolean
    _emailToCheck = emailToCheck.Trim().ToLowerInvariant()
    Return _allInfos.Exists(AddressOf DoesExist)
  End Function
 
  Private Function DoesExist(ByVal info As NewsletterInfo.Info) As Boolean
    Return info.Email.ToLowerInvariant().Equals(_emailToCheck)
  End Function

End Class

Hvor kaldet fra din kodebehind bliver noget i retning af:

Public Function IsExistingEmail(ByVal Email As String) As Boolean Implements NewsletterBLLInterface.IsExistingEmail
    '--- Tjekker om email adressen allerede er tilmeldt.
    Dim emailChecker As New EmailChecker(GetAll())
    Return emailChecker.IsExistingEmail(Email)
End Function

// Jens
Avatar billede websam Nybegynder
13. marts 2006 - 09:20 #8
jens_klinting >>

Det er oxo noget i den stil jeg havde forestillet mig jeg ville lave, så har jeg en klasse med metoder til håndtering af generic lists.

Jeg vil doh nok lave den mere neutral så jeg kan benytte den over hele min application, på den måde skal jeg så ikke bekymre mig om at skulle lave det flere gange til mine forskellige moduler.

Når det så er sagt så har jeg snakket med en på asp.net's fora der mener det ville være hurtigere at søge i databasen efter en bestemt record hvis antallet af records er over et par 100 og specielt hvis der er lavet indexsering på tabellerne i databasen.

Søgning i en liste vil (efter hans mening) blive overkill da databaser er bygget til at håndtere store mængder data, men det er der sikkert mange meninger om :o)

/Websam
Avatar billede websam Nybegynder
13. marts 2006 - 09:27 #9
Metoden :

Public Function IsExistingEmail(ByVal Email As String) As Boolean Implements NewsletterBLLInterface.IsExistingEmail
    '--- Tjekker om email adressen allerede er tilmeldt.
    Dim emailChecker As New EmailChecker(GetAll())
    Return emailChecker.IsExistingEmail(Email)
End Function

Ligger så ikke i code-behind, men i mit business lag istedet, men dette er blot bakateller ;o)

/Websam
Avatar billede websam Nybegynder
17. marts 2006 - 19:20 #10
smid nogle svar
Avatar billede websam Nybegynder
05. april 2006 - 14:43 #11
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester