10. marts 2006 - 14:39Der 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.
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.
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)
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 ?
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
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)
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)
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.