Saya telah bekerja cukup lama dengan LINQ. Namun, masih menjadi misteri apa perbedaan sebenarnya antara rasa LINQ yang disebutkan.
Jawaban yang berhasil akan berisi perbedaan singkat di antara mereka. Apa tujuan utama masing-masing rasa, apa manfaatnya, dan apakah ada dampak kinerja ...
NB Saya tahu bahwa ada banyak sumber informasi di luar sana, tetapi saya mencari semacam "lembar sontekan" yang menginstruksikan seorang pemula ke mana harus menuju tujuan tertentu.
Jawaban:
semuanya adalah LINQ - Language Integrated Query - jadi semuanya memiliki banyak kesamaan. Semua "dialek" ini pada dasarnya memungkinkan Anda melakukan pemilihan data gaya-kueri, dari berbagai sumber.
Linq-to-SQL adalah upaya pertama Microsoft di ORM - Object-Relational Mapper. Ini hanya mendukung SQL Server. Ini adalah teknologi pemetaan untuk memetakan tabel database SQL Server ke objek .NET.
Linq-to-Entities adalah ide yang sama, tetapi menggunakan Entity Framework di latar belakang, seperti ORM - lagi-lagi dari Microsoft, tetapi mendukung beberapa backend database
Linq-to-DataSets adalah LINQ, tetapi menggunakan bertentangan dengan "old-style" ADO.NET 2.0 DataSets - pada masa sebelum ORM dari Microsoft, semua yang dapat Anda lakukan dengan ADO.NET adalah mengembalikan DataSets, DataTables, dll., Dan Linq -to-DataSets menanyakan penyimpanan data tersebut untuk data. Jadi dalam kasus ini, Anda akan mengembalikan DataTable atau DataSets (System.Data namespace) dari backend database, dan kemudian menanyakan mereka yang menggunakan sintaks LINQ
sumber
LINQ adalah sekumpulan teknologi yang luas, berdasarkan di sekitar (misalnya) sintaks pemahaman kueri, misalnya:
var qry = from x in source.Foo where x.SomeProp == "abc" select x.Bar;
yang dipetakan oleh kompilator menjadi kode:
var qry = source.Foo.Where(x => x.SomeProp == "abc").Select(x => x.Bar);
dan di sini keajaiban yang sesungguhnya dimulai. Perhatikan bahwa kami belum mengatakan apa yang
Foo
ada di sini - dan kompiler tidak peduli! Selama itu dapat menyelesaikan beberapa metode yang sesuai disebutWhere
yang dapat mengambil lambda, dan hasilnya ada beberapaSelect
metode yang dapat menerima lambda, itu senang.Sekarang mempertimbangkan bahwa lambda dapat dikompilasi baik dalam metode anonim (delegasi, untuk LINQ-to-Objects, yang mencakup LINQ-to-DataSet), atau untuk ekspresi-pohon (model runtime yang mewakili lambda dalam model objek ).
Untuk data dalam memori (biasanya
IEnumerable<T>
), ini hanya mengeksekusi delegasi - dengan baik dan cepat. Tapi untukIQueryable<T>
objek-representasi ekspresi (aLambdaExpression<...>
) itu dapat memisahkannya dan menerapkannya pada contoh "LINQ-to-Something".Untuk database (LINQ-to-SQL, LINQ-to-Entities) ini mungkin berarti menulis TSQL, misalnya:
SELECT x.Bar FROM [SomeTable] x WHERE x.SomeProp = @p1
Tapi itu bisa (untuk ADO.NET Data Services, misalnya) berarti menulis permintaan HTTP.
Menjalankan kueri TSQL yang ditulis dengan baik yang mengembalikan sejumlah kecil data lebih cepat daripada memuat seluruh database melalui jaringan dan kemudian memfilter di klien. Keduanya memiliki skenario ideal dan skenario yang salah.
Tujuan dan manfaat di sini adalah untuk memungkinkan Anda menggunakan sintaks tunggal yang diperiksa statis untuk menanyakan berbagai sumber data, dan membuat kode lebih ekspresif (kode "tradisional" untuk mengelompokkan data, misalnya, tidak sangat jelas dalam hal apa yang coba dilakukannya - itu hilang dalam massa kode).
sumber
LINQ adalah singkatan dari bahasa terintegrasi query. Ini memungkinkan Anda menggunakan bahasa kueri "gaya SQL" langsung di dalam C # untuk mengekstrak informasi dari sumber data.
Sumber data itu juga bisa berupa file XML - Linq ke XML .
Atau bahkan hanya kelas Koleksi benda biasa - Linq ke Objek .
LINQ menjelaskan teknologi kueri, nama lainnya menjelaskan sumber data yang ditanyakan.
Untuk sedikit latar belakang tambahan:
Set data adalah objek ADO.net di mana data dimuat dari database ke dalam .net Dataset dan Linq dapat digunakan untuk menanyakan data tersebut setelah dimuat.
Dengan Linq ke SQL Anda menentukan kelas .net yang memetakan ke database dan Linq-ke-SQL menangani pemuatan data dari database server SQL
Dan terakhir, kerangka kerja Entitas adalah sistem di mana Anda dapat menentukan database dan pemetaan objek dalam XML, dan kemudian dapat menggunakan LINQ untuk meminta data yang dimuat melalui pemetaan ini.
sumber