LINQ στο Runtime NET 2,0

ψήφοι
53

Μπορεί ένας LINQ να ενεργοποιήσετε την εφαρμογή τρέχει σε ένα μηχάνημα που μόλις έχει εγκατασταθεί το χρόνο εκτέλεσης .NET 2.0;

Θεωρητικά, LINQ δεν είναι τίποτα περισσότερο από συντακτική ζάχαρη, και η προκύπτουσα κώδικα IL θα πρέπει να εξετάσει το ίδιο όπως θα έχετε στο .NET 2.0.

Πώς μπορώ να γράψω LINQ χωρίς τη χρήση των βιβλιοθηκών .NET 3.5; Θα τρέξει σε .NET 2.0;

Δημοσιεύθηκε 05/08/2008 στις 13:03
πηγή χρήστη
Σε άλλες γλώσσες...                            


9 απαντήσεις

ψήφοι
76

Είναι περίεργο ότι κανείς δεν έχει αναφερθεί LINQBridge . Αυτό το μικρό φοβερό έργο είναι μια backport της LINQ (IEnumerable, αλλά χωρίς IQueryable) και της εξάρτησής της (Func, Δράση, κλπ) σε .NET 2.0. Και:

Αν το έργο σας παραπέμπει σε LINQBridge κατά τη σύνταξη, τότε θα συνδεθεί με φορείς ερώτημα LINQBridge του? αν παραπέμπει System.Core κατά τη σύνταξη, τότε θα συνδεθεί με φορείς ερώτημα Framework 3.5 του.

Απαντήθηκε 27/12/2008 στις 03:51
πηγή χρήστη

ψήφοι
32

Υπάρχουν κάποιες «αμυχές» που περιλαμβάνουν τη χρήση ενός System.Core.dll από το Framework 3.5 για να τρέξει με .net 2.0, αλλά προσωπικά δεν θα ήθελα να χρησιμοποιήσετε ένα τέτοιο κάπως σαθρά θεμέλια.

Δείτε εδώ: LINQ υποστήριξη για .NET 2.0

  1. Δημιουργήστε μια νέα εφαρμογή κονσόλας
  2. Κρατήστε μόνο συστήματος και System.Core όπως αναφέρεται συνελεύσεις
  3. Ρύθμιση αντιγραφής Τοπική να ισχύει και για System.Core, επειδή δεν υπάρχει στο .NET 2.0
  4. Χρησιμοποιήστε ένα ερώτημα LINQ στην Κύρια μέθοδο. Για παράδειγμα, η μία κάτω.
  5. Χτίζω
  6. Αντιγράψτε το σύνολο της παραγωγής κάδο σε μια μηχανή όπου μόνο είναι εγκατεστημένο το .NET 2.0
  7. Τρέξιμο

(Απαιτεί .net 2.0 SP1 και δεν έχω ιδέα αν ομαδοποίηση του System.Core.dll παραβιάζει την EULA)

Απαντήθηκε 05/08/2008 στις 13:07
πηγή χρήστη

ψήφοι
11

Θεωρητικά ναι, αρκεί να διανείμει τα συγκεκριμένα συγκροτήματα LINQ και εξαρτήσεις. Ωστόσο, αυτό αποτελεί παραβίαση της αδειοδότησης της Microsoft. Scott Hanselman έγραψε ένα blog post σχετικά Ανάπτυξη του ASP.NET MVC σε ASP.NET 2.0 το οποίο είναι παρόμοιο με αυτό που θέλουν να κάνουν.

Απαντήθηκε 05/08/2008 στις 13:07
πηγή χρήστη

ψήφοι
7

Μπορείτε να χρησιμοποιήσετε τις πηγές LINQ από μονο (ΝΕΤ για Linux) για να πάρετε LINQ που λειτουργούν με .NET 2.0.

IEnumerable<T> : yes 
IQueryable<T>  : yes
LINQ to XML : has been working in the trunk, but due to further additions, the trunk doesn't compile anymore

Κάποιος έχει κάνει εδώ:
LINQ για .NET 2.0

Απαντήθηκε 04/03/2011 στις 19:51
πηγή χρήστη

ψήφοι
6

Σύντομη απάντηση:

  • LINQ σε αντικείμενα: ναι ( IEnumerable<T>)
  • LINQ σε SQL / οντότητες: όχι ( IQueryable<T>)
  • LINQ σε XML / DataSets: δεν έχει ακόμη;

Δείτε ερώτημα αυτό για το .Net 3.5 χαρακτηριστικά που είναι διαθέσιμα αυτόματα ή με λίγη προσπάθεια, όταν στοχοθέτηση .Net 2.0 από VS2008.

Βασικά, τίποτα που είναι μόνο «ζάχαρη σύνταξη» και οι νέες μεταγλωττιστές (C # 3.0, VB 9,0) εκπέμπουν ως 2,0-συμβατό IL θα λειτουργήσει. Αυτό περιλαμβάνει πολλά χαρακτηριστικά που χρησιμοποιούνται από LINQ, όπως ανώνυμες κατηγορίες, λάμδα ως ανώνυμη συνέδρους, αυτόματη ιδιότητες, αρχικοποιήσεις αντικείμενο, και αρχικοποιήσεις συλλογή.

Ορισμένες λειτουργίες LINQ να χρησιμοποιήσετε τις κατηγορίες, τις διασυνδέσεις, οι αντιπρόσωποι και οι μέθοδοι επέκταση που ζουν στα νέα 3.5 συνελεύσεις (όπως System.Core.dll). Ανακατανομή αυτές τις συνελεύσεις αποτελεί παραβίαση της άδειας, αλλά θα μπορούσαν να επαναυλοποιηθεί. Χρησιμοποιώντας μεθόδους επέκτασης μόνο που χρειάζεται είναι να δηλώσετε ένα κενό System.Runtime.CompilerServices.ExtensionAttribute. LINQ σε αντικείμενα στηρίζεται σε IEnumerable<T>επεκτάσεις και αρκετές δηλώσεις εκπροσώπου (οι Action<T>και Func<T>οικογένειες) και έχουν εφαρμοστεί σε LINQBridge (όπως mausch αναφέρεται). LINQ σε XML και LINQ να DataSets βασίζονται σε LINQ σε αντικείμενα που υποθέτω ότι θα μπορούσε επίσης να εφαρμοστεί για .Net 2.0, αλλά δεν έχω δει αυτό κάνει ακόμα.

LINQ σε SQL και LINQ σε οντότητες απαιτούν πολλές νέες κατηγορίες ( DataContext/ ObjectContext, πολλά χαρακτηριστικά, EntitySet<T>, EntityRef<T>, Link<T>, IQueryable<T>, κλπ) και η έκφραση δέντρα, τα οποία, ακόμη και αν με κάποιο τρόπο επαναυλοποιηθεί, θα απαιτήσει πιθανότατα τουλάχιστον .Net 2.0 SP1 για να εργαστούν.

Απαντήθηκε 19/05/2009 στις 17:19
πηγή χρήστη

ψήφοι
5

Δεν είμαι σίγουρος για C #.

Ξέρω, όμως, ότι μπορείτε να γράψετε κώδικα VB LINNQ w / out τα 3,5 βιβλιοθήκες, αρκεί να χρησιμοποιήσετε το πρόγραμμα μεταγλώττισης VS 2008 με στόχο το πλαίσιο 2.0.

Μπορείτε, ωστόσο, να εφαρμόσει κάποιες από τις μεθόδους LINQ τον εαυτό σας.

LINQ χρησιμοποιεί ένα syntatic μετασχηματισμού να μεταφράσει τα ερωτήματα σε εκτελέσιμο κώδικα. Βασικά, θα χρειαστεί κώδικα όπως αυτό:

dim q = from x in xs where x > 2 select x*4;

και να το μετατρέψει σε κώδικα όπως αυτό:

dim q = xs.where(function(x) x > 2).select(function(x) x * 4);

Για την λειτουργικότητα LINQ ότι τα πλοία με το πλαίσιο 3.5, αυτές οι μέθοδοι εφαρμόζονται ως μέθοδοι επέκτασης είτε IEnumerable ή IQueryable (υπάρχει επίσης μια δέσμη των μεθόδων που λειτουργούν σε σύνολα δεδομένων πάρα πολύ).

Οι προεπιλεγμένες IEnumerable μεθόδους επέκταση που ορίζεται στο System.Linq.Enumerable και μοιάζει κάπως έτσι:

<Extension()>
public function Select(of T, R)(source as IEnumerable(of T), transform as Func(of T, R)) as IEnumerable(of R)

   'do the transformation...

end function

Οι IQueryable μέθοδοι επέκταση λάβει εκφράσεις δέντρα ως επιχειρήματα, όχι λάμδα. Θα μοιάζει με αυτό:

 <Extension()>
 public function Select(of T, R)(source as IQueryable<T>, transform as Expression(of Func(of T, R))
     'build a composite IQueryable that contains the expression tree for the transformation
 end function

Οι εκδόσεις δέντρο έκφρασης σας δίνουν τη δυνατότητα να πάρετε μια αναπαράσταση δέντρων από τις εκφράσεις που παρέχονται με τις ρήτρες που μπορεί στη συνέχεια να χρησιμοποιηθεί για τη δημιουργία κώδικα SQL (ή ό, τι άλλο θέλετε).

Θα μπορούσατε ίσως να δημιουργήσετε τη δική σας εκδοχή της LINQ σε αντικείμενα σε περίπου μια ημέρα ή έτσι. Είναι όλα πολύ απλό.

Αν θέλετε να χρησιμοποιήσετε DLINQ, τότε τα πράγματα θα είναι λίγο πιο δύσκολο.

Απαντήθηκε 10/10/2008 στις 22:30
πηγή χρήστη

ψήφοι
3

Όχι, γιατί ενώ νόμιζες LINQ είναι πραγματικά ακριβώς συντακτική ζάχαρη, στην πραγματικότητα σε μεγάλο βαθμό χρησιμοποιείται δέντρα έκφραση - ένα χαρακτηριστικό που απουσιάζει στο .NET 2.0.

Τούτου λεχθέντος .NET 3.5 βασίζεται μόνο πάνω στην κορυφή του .NET 2.0, και αυτός είναι ο λόγος για τον οποίο η IL δεν φαίνεται «διαφορετικό» ή «ειδικών».

Δεν βλέπω το λόγο για τον οποίο δεν πρέπει απλώς να εγκαταστήσετε το .NET Framework 3.5. Όλα .NET 2.0 θα δουλεύουν μια χαρά σε αυτό, υπόσχονται :)

Απαντήθηκε 05/08/2008 στις 13:07
πηγή χρήστη

ψήφοι
2

Απ 'όσο ξέρω η βιβλιοθήκη LINQ είναι διαθέσιμη μόνο από το πλαίσιο 3.0. Αν θέλετε να χρησιμοποιήσετε κάτι παρόμοιο στο πλαίσιο 2.0, θα πρέπει να την ξαναγράψουμε τον εαυτό σας :) ή να βρείτε ένα παρόμοιο βιβλιοθήκη τρίτου μέρους. Βρήκα μόνο ένα κομμάτι των πληροφοριών εδώ , αλλά δεν με έπεισε ούτε.

Απαντήθηκε 05/08/2008 στις 13:14
πηγή χρήστη

ψήφοι
0

Μπορείτε να χρησιμοποιήσετε linqbridge για .net 2.0

Απαντήθηκε 25/03/2015 στις 20:05
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more