Ότι ερωτήσεις έχω πάνω στα LINQ Samples θα τα γράφω εδώ (άρα όσο προχωράω στα samples θα βάζω κι άλλα reply)
Οκ, λοιπόν... κοιτάω αυτή τη σειρά κώδικα από τα LINQ Samples (Νο5) επί ώρα.. κάνω μικρο-αλλαγές... και δεν μπορώ να καταλάβω γιατί δουλεύει!
Dim shortDigits = digits.Where(Function(digit, index) digit.Length() < index)
Και πράγματι αναγνωρίζει ποια νούμερα μέσα από το "digits" έχει περισσότερα ψηφία από την τιμή του..
μέχρι και το "where" είμαστε ΟΚ. μετά λέει "Funtion" αλλά με περιορίζει στο να βάλω μέσα του είτε [String] είτε [String, Integer] αν και όταν πάω πάνω του λέει
[String, Boolean] είτε [String, Integer, Boolean]
Μετά, αφήνοντας απόσταση ΔΕΝ με προτρέπει να γράψω τίποτα, και ούτε δείχνει κάτι στο description του.. όμως αν δεν γράψεις σου βγάζει πρόβλημα.
Εδώ βλέπουμε γραμμένο το "digit.Length() < index"
Θέλει μόνο ονόματα μεταβλητών που ΔΕΝ υπάρχουν - αν υπάρχει η μεταβλητή σου βγάζει πρόβλημα..
και η μεταβλητή φυσικά μπορεί να έχει ότι όνομα νάναι..
Άρα πως στο καλό κάνει αυτό που κάνει??
Όλο το κομμάτι κώδικα είναι αυτό:
Public Sub Linq5()
Dim digits = New String() {"jhghj", "one", "two", "three", "four", "-one", "six", "seven", "eight", "nine"}
Dim shortDigits = digits.Where(Function(digit, index) digit.Length() < index)
WriteLine("Short digits:")
For Each d In shortDigits
WriteLine("The word " & d & " is shorter than its value.")
Next
End Sub
Sample 12:
δεν καταλαβαίνω ούτε αυτόν τον κώδικα. Δουλεύει, ναι.. αλλά όπως και πριν.. γιατί δουλεύει? δεν μπορώ να αντιληφθώ τι λέει. πως διαβάζεται...
1
| Dim numsInPlace = numbers.Select(Function(num, index) New With {.Num = num, .InPlace = (num = index)}) |
ολόκληρος ο κώδικας είναι ο:
1
2
3
4
5
6
7
8
9
10
| Public Sub Linq12()
Dim numbers As Integer() = {5, 4, 1, 3, 9, 8, 6, 7, 2, 0}
Dim numsInPlace = numbers.Select(Function(num, index) New With {.Num = num, .InPlace = (num = index)})
Console.WriteLine("Number: In-place?")
For Each n In numsInPlace
Console.WriteLine(n.Num & ": " & n.InPlace)
Next
End Sub |
και βλέπει αν οι αριθμοί είναι στη σωστή σειρά, και λέει True/False αναλόγως.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Έχω θέμα και με το Sample 19..
Δεν καταλαβαίνω αυτή τη σειρά:
1
| Dim customerOrders = customerList.SelectMany(Function(cust, custIndex) From ord In cust.Orders Select "Customer #" & (custIndex + 1) & " has an order with OrderID " & ord.OrderID) |
ο κώδικας βγάζει σειρές με το εξής pattern: "Customer #{No} has an order with OrderID {OrderIdNum}"
Όλες αυτές οι σειρές υπάρχουν μέσα σε αυτή τη μεταβλητή.. αλλά δεν καταλαβαίνω πως το κάνει.
Ολόκληρος ο κώδικας είναι:
1
2
3
4
5
6
7
8
9
| Public Sub Linq19()
Dim customerOrders = customerList.SelectMany(Function(cust, custIndex) From ord In cust.Orders Select "Customer #" & (custIndex + 1) & " has an order with OrderID " & ord.OrderID)
For Each Order In customerOrders
Output &= vbCrLf & Order
Next
WriteLine(Output.Substring(2))
End Sub |
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Πρόβλημα και με το sample 25.
Γενικά απότι βλέπω, πρόβλημα έχω στα samples που γράφουν μέσα τους το "function". Τα υπόλοιπα είναι απόλυτα κατανοητά...
Αν αλλάξω το function σε Sub, δεν δουλεύει.. άρα το συγκεκριμένο function δεν είναι το ίδιο με αυτό που γράφουμε έξω έτσι? (δλδ με το π.χ. Public Shared Function MyFunction [Byval Var1 as SomeType, Byval Var2 as SomeType, ByRef Var3 As SomeType] )
Συγκεκριμένα το 25 γράφει:
1
2
3
4
5
6
7
8
9
10
| Public Sub Linq25()
Dim numbers() As Integer = {5, 4, 1, 3, 9, 8, 6, 7, 2, 0}
Dim firstSmallNumbers = numbers.TakeWhile(Function(n, index) n >= index)
WriteLine("First numbers not less than their position:")
For Each n In firstSmallNumbers
WriteLine(CStr(n))
Next
End Sub |
και όπως πάντα, το πρόβλημά μου βρίσκετε στη σειρά με το "Function":
1
| Dim firstSmallNumbers = numbers.TakeWhile(Function(n, index) n >= index) |