Italian Libreria LINQ

Vasmar

Member
Licensed User
Buongiorno (qui) piovoso,
Avrei bisogno della libreria in oggetto, potete dirmi per favore dove la posso trovare?
 

Star-Dust

Expert
Licensed User
Longtime User
Buongiorno,

Se intendi il linguaggio .net che estende le funzioni sql non mi pare esiste un corrispondente qui.

Hai cercato sul forum? Di preciso cosa vorresti fare?
 

Vasmar

Member
Licensed User
Buongiorno,

Se intendi il linguaggio .net che estende le funzioni sql non mi pare esiste un corrispondente qui.

Hai cercato sul forum? Di preciso cosa vorresti fare?
Intendo in B4x, ma forse non esiste niente del genere...

Vorrei cercare un certo elemento con un certo valore in una lista di type.
Faccio un esempio:
B4X:
Type RecordMio (Nome as string, Eta as int)
Dim ListaMia as list

' Altrove '
Dim R as Record
R.Nome = ....
R.Eta = ...
ListaMia.add(R)
... popolo la lista ...

' Poi voglio cercare un elemento con chiave (Eta = 22)'
Dim Trovo as Record = ListaMia.FindRecord("Eta", 22)
if Trovo.IsInitialized then
  ' Faccio cose '
end if
 

Star-Dust

Expert
Licensed User
Longtime User
Ti riferisci proprio a .NET

In B4X faresti diversamente perche non c'è record,
List.IndexOf funziona solo con liste di Dati di tipo base (integer, double, byte, String, eccc) ma non su dati tipizzato o piu correttamente in un campo interno a un dato tipizzato. Questo perche se fai una ricerca IndexOf nei tipizzati non paragona il valore del contenuto (ByVal) ma l'indice di riferimento (ByRef)

Ma spiego meglio con un esempio:

B4X:
Sub Process_Globals
    Type RecordMio (Nome As String, Eta As Int)
End Sub

Sub Button1_Click
    Dim Trovo As RecordMio
    Dim ListaMia As List
    ListaMia.Initialize
  
    ListaMia.Add(CreateRecordMio("Mario",22))
    ListaMia.Add(CreateRecordMio("Luca",65))
  
    ' Se vuoi ordinare la lista: ListaMia.Sort(True)
  
    For Each item As RecordMio In ListaMia
        If item.Eta=22 Then Trovo = item
    Next
    If Trovo.IsInitialized Then Log("Trovato")
End Sub

' Questa viene creata in autmatico.
' Passa il mouse su Typer record mio e ti appare genera metodo
Public Sub CreateRecordMio (Nome As String, Eta As Int) As RecordMio
    Dim t1 As RecordMio
    t1.Initialize
    t1.Nome = Nome
    t1.Eta = Eta
    Return t1
End Sub
 
Last edited:

Vasmar

Member
Licensed User
Grazie della soluzione, purtroppo la lettura con chiave si risolve in una lettura sequenziale fino a trovare l'elemento.

Nell'esempio che ho fatto ho sbagliato a scrivere alla riga 5
B4X:
Dim R as Record
doveva essere
B4X:
Dim R as RecordMio
ma non cambia nulla.
Grazie ancora
 

Star-Dust

Expert
Licensed User
Longtime User
Se vuoi una ricerca veloce e non sequenziale devi usare le map
 

Xfood

Expert
Licensed User
Longtime User
Non so se dico una fesseria, ( mi sono appena svegliato) ma questa nuova gestione del grande Erel, potrebbe andare?
 

Star-Dust

Expert
Licensed User
Longtime User
All'interno usa sempre un ciclo per effettuare ricerche
 

Star-Dust

Expert
Licensed User
Longtime User
Mi puoi fare per favore un piccolo esempio?
Non ho mai utilizzato le map

Esempio1:
Sub Esempio1_Click
    Dim Trovo As RecordMio
    Dim Mappa As Map
   
   
    Mappa.Initialize
 
    Mappa.put("Mario",CreateRecordMio("Mario",22))
    Mappa.put("Luca",CreateRecordMio("Luca",65))
 
   ' ci deve essere un campo chiave
   Trovo=Mappa.Get("Mario")
 
    If Trovo.IsInitialized Then Log("Trovato")
End Sub

Esempio2:
Sub Esempio2_Click
    ' Anche Trovo è una Mappa
    Dim Trovo As Map
    Dim Mappa As Map
   
   
    Mappa.Initialize
 
    Mappa.put("Mario",CreateMap("nome":"Mario","età":22))
    Mappa.put("Luca",CreateMap("nome":"Luca","età":65))
 
   ' ci deve essere un campo chiave
   Trovo=Mappa.Get("Mario")
 
    If Trovo.IsInitialized Then
           Log(Trovo.get("nome"))
        Log(Trovo.get("età"))
    End If
End Sub
 
Cookies are required to use this site. You must accept them to continue using the site. Learn more…