LINQ adalah salah satu perbaikan terhebat untuk .NET sejak generik dan ini menghemat waktu, dan baris kode. Namun, sintaks yang lancar tampaknya jauh lebih alami bagi saya daripada sintaks ekspresi kueri.
var title = entries.Where(e => e.Approved)
.OrderBy(e => e.Rating).Select(e => e.Title)
.FirstOrDefault();
var query = (from e in entries
where e.Approved
orderby e.Rating
select e.Title).FirstOrDefault();
Apakah ada perbedaan di antara keduanya atau apakah ada manfaat tertentu dari satu di atas yang lain?
Jawaban:
Tidak ada yang lebih baik: mereka melayani kebutuhan yang berbeda. Sintaks kueri muncul dengan sendirinya saat Anda ingin memanfaatkan berbagai variabel rentang . Ini terjadi dalam tiga situasi:
Berikut ini sebuah contoh (dari sampel LINQPad):
Sekarang bandingkan ini dengan hal yang sama dalam sintaks metode:
Sintaks metode, di sisi lain, memperlihatkan keseluruhan penuh operator kueri dan lebih ringkas dengan kueri sederhana. Anda bisa mendapatkan yang terbaik dari kedua dunia dengan mencampur sintaks kueri dan metode. Ini sering dilakukan dalam permintaan LINQ to SQL:
sumber
Saya lebih suka menggunakan yang terakhir (kadang-kadang disebut "sintaks pemahaman query") ketika saya bisa menulis seluruh ekspresi seperti itu.
Begitu saya harus menambahkan (tanda kurung) dan
.MethodCalls()
, saya berubah.Ketika saya menggunakan yang pertama, saya biasanya meletakkan satu klausa per baris, seperti ini:
Saya menemukan itu sedikit lebih mudah dibaca.
sumber
Setiap gaya memiliki pro dan kontra. Sintaks kueri lebih baik ketika bergabung dan memiliki kata kunci let yang berguna yang membuat membuat variabel sementara di dalam kueri menjadi mudah.
Sintaks yang lancar di sisi lain memiliki lebih banyak metode dan operasi yang tidak diekspos melalui sintaks kueri. Juga karena mereka hanya metode ekstensi Anda dapat menulis sendiri.
Saya telah menemukan bahwa setiap kali saya mulai menulis pernyataan LINQ menggunakan sintaks kueri akhirnya saya harus memasukkannya dalam tanda kurung dan kembali menggunakan metode ekstensi LINQ yang lancar. Sintaks kueri tidak memiliki cukup fitur untuk digunakan dengan sendirinya.
sumber
Dalam VB.NET saya lebih suka sintaks kueri.
Aku benci mengulangi kata-kata jelek
Function
:Query yang rapi ini jauh lebih mudah dibaca dan dikelola menurut saya:
Sintaks kueri VB.NET juga lebih kuat dan tidak terlalu bertele-tele daripada di C #: https://stackoverflow.com/a/6515130/284240
Misalnya kueri LINQ to DataSet (Objects) ini
VB.NET:
C #:
sumber
Saya tidak mendapatkan sintaks kueri sama sekali. Tidak ada alasan untuk itu dalam pikiran saya. biarkan dapat dicapai dengan. Pilih dan jenis anonim. Saya hanya berpikir hal-hal terlihat jauh lebih terorganisir dengan "tanda baca" di sana.
sumber
Antarmuka yang lancar jika hanya ada di mana. Jika saya memerlukan pilih atau orderby, saya biasanya menggunakan sintaks Query.
sumber
Sintaks yang lancar memang tampak lebih kuat, itu juga harus bekerja lebih baik untuk mengatur kode menjadi metode yang dapat digunakan kembali.
sumber
Saya tahu pertanyaan ini ditandai dengan C #, tetapi sintaks Fasih berselisih dengan VB.NET.
sumber
Saya sangat suka sintaks Fasih dan saya mencoba menggunakannya di mana saya bisa, tetapi dalam kasus-kasus tertentu, misalnya di mana saya menggunakan bergabung, saya biasanya lebih suka sintaks Query, dalam kasus-kasus saya merasa lebih mudah dibaca, dan saya pikir beberapa orang lebih akrab dengan sintaks Query (seperti SQL), daripada lambdas.
sumber
Meskipun saya mengerti dan menyukai format yang lancar, saya tetap menggunakan Query untuk sementara waktu karena alasan keterbacaan. Orang-orang yang baru saja diperkenalkan ke LINQ akan menemukan Query jauh lebih nyaman untuk dibaca.
sumber
Saya lebih suka sintaks kueri karena saya berasal dari pemrograman web tradisional menggunakan SQL. Jauh lebih mudah bagi saya untuk membungkus kepala saya. Namun, saya pikir saya akan mulai memanfaatkan. Di mana (lambda) karena pasti jauh lebih pendek.
sumber
Saya telah menggunakan Linq selama sekitar 6 bulan sekarang. Ketika saya pertama kali mulai menggunakannya saya lebih suka sintaks query karena sangat mirip dengan T-SQL.
Tapi, saya secara bertahap datang ke yang sekarang, karena mudah untuk menulis potongan kode yang dapat digunakan kembali sebagai metode ekstensi dan hanya rantai mereka bersama. Meskipun saya menemukan menempatkan setiap klausa pada barisnya sendiri banyak membantu dengan keterbacaan.
sumber
Saya baru saja menetapkan standar perusahaan kami dan kami menegakkan penggunaan metode Extension. Saya pikir itu ide yang baik untuk memilih satu dari yang lain dan jangan mencampurnya dalam kode. Metode ekstensi lebih banyak membaca seperti kode lainnya.
Sintaks pemahaman tidak memiliki semua operator dan menggunakan tanda kurung di sekitar kueri dan menambahkan metode ekstensi setelah semua hanya meminta saya untuk menggunakan metode ekstensi dari awal.
Tetapi sebagian besar itu hanya preferensi pribadi dengan beberapa pengecualian.
sumber