Menulis Pertanyaan dalam C# LINQ

Menulis Pertanyaan Dalam C Linq



Sama seperti SQL, adalah mungkin untuk menulis pertanyaan dalam C# LINQ menggunakan sintaks pertanyaan. Pertanyaan ini digunakan dalam aplikasi pangkalan data C# di web untuk mendapatkan data daripada pangkalan data dan dipaparkan di web kepada pengguna pihak ketiga. Dalam panduan ini, kami akan membincangkan beberapa pertanyaan LINQ yang serupa dengan SQL. Untuk ini, kami akan membuat sumber data senarai dan menggunakan pertanyaan di dalamnya.

Sintaks Pertanyaan:

Mari lihat sintaks generik:

daripada iterator dalam Sumber data
pilih iterator ;

di sini:







  1. Data_Source boleh menjadi senarai yang menyimpan data.
  2. Iterator digunakan untuk mengambil elemen daripada Data_Source.

Sumber data

Dalam keseluruhan panduan ini, kami akan menggunakan senarai rekod berikut sebagai sumber data dan semua pertanyaan digunakan pada sumber data ini sahaja. Pastikan anda menjalankan kod ini dalam persekitaran anda dan ubah suai pernyataan pertanyaan dengan contoh berikut satu demi satu yang akan kita bincangkan:



menggunakan Sistem ;
menggunakan Sistem.Koleksi.Generik ;
menggunakan Sistem.Linq ;
menggunakan Sistem.Koleksi ;

awam kelas Pengiraan
{
awam statik batal Utama ( )
{
// Penciptaan senarai
Senaraikan harga_negara = baru Senaraikan ( ) {

// Tambah 5 rekod ke dalam Senarai
baru harga ( ) { item = 'Buah-buahan' ,lokasi = 'USA' , kuantiti = 100 , kos = 345.78 } ,
baru harga ( ) { item = 'kacang' ,lokasi = 'India' , kuantiti = 200 , kos = 3645.78 } ,
baru harga ( ) { item = 'Lain-lain' ,lokasi = 'UK' , kuantiti = 500 , kos = 90.68 } ,
baru harga ( ) { item = 'minyak' ,lokasi = 'USA' , kuantiti = 100 , kos = 345.78 } ,
baru harga ( ) { item = 'Cili' ,lokasi = 'USA' , kuantiti = 10 , kos = 67.89 } ,
} ;


untuk setiap ( adalah i dalam harga_negara )
{
Konsol . WriteLine ( i . item + ' ' + i . lokasi + ' ' + i . kuantiti + ' ' + i . kos ) ;
}
}
}
awam kelas harga {
awam tali item { dapatkan ; ditetapkan ; }
awam tali lokasi { dapatkan ; ditetapkan ; }
awam int kuantiti { dapatkan ; ditetapkan ; }
awam berganda kos { dapatkan ; ditetapkan ; }
}

Rekod:







Penjelasan:

1. Cipta harga dengan atribut berikut:

2. Cipta kelas lain iaitu 'Pengiraan' dengan kaedah utama dan cipta senarai harga_negara dengan lima rekod.



Pilih

Pada asasnya, 'pilih' ialah pengendali unjuran yang memilih atribut daripada sumber data yang ditentukan. Pertanyaan bermula dengan 'dari'. Kemudian, kami menentukan lelaran yang melelaran ke atas sumber data. Kemudian, pengendali 'pilih' ditentukan.

Sintaks:

Semua Atribut: daripada iterator dalam Data_Source pilih iterator;

Atribut Khusus: daripada iterator dalam Data_Source pilih iterator.attribute;

Contoh 1:

Mari tulis pertanyaan untuk memilih semua rekod daripada senarai.

menggunakan Sistem ;
menggunakan Sistem.Koleksi.Generik ;
menggunakan Sistem.Linq ;
menggunakan Sistem.Koleksi ;

awam kelas Pengiraan
{
awam statik batal Utama ( )
{
// Penciptaan senarai
Senaraikan harga_negara = baru Senaraikan ( ) {

// Tambah 5 rekod ke dalam Senarai
baru harga ( ) { item = 'Buah-buahan' ,lokasi = 'USA' , kuantiti = 100 , kos = 345.78 } ,
baru harga ( ) { item = 'kacang' ,lokasi = 'India' , kuantiti = 200 , kos = 3645.78 } ,
baru harga ( ) { item = 'Lain-lain' ,lokasi = 'UK' , kuantiti = 500 , kos = 90.68 } ,
baru harga ( ) { item = 'minyak' ,lokasi = 'USA' , kuantiti = 100 , kos = 345.78 } ,
baru harga ( ) { item = 'Cili' ,lokasi = 'USA' , kuantiti = 10 , kos = 67.89 } ,
} ;

//pilih operator dalam pertanyaan
adalah data = daripada i dalam harga_negara
pilih i ;

untuk setiap ( adalah i dalam data )
{
Konsol . WriteLine ( i . item + ' ' + i . lokasi + ' ' + i . kuantiti + ' ' + i . kos ) ;

}
}
}
awam kelas harga {
awam tali item { dapatkan ; ditetapkan ; }
awam tali lokasi { dapatkan ; ditetapkan ; }
awam int kuantiti { dapatkan ; ditetapkan ; }
awam berganda kos { dapatkan ; ditetapkan ; }
}

Pengeluaran:

Di sini, kami tidak menyatakan sebarang atribut dalam pertanyaan 'pilih'. Kami mengambil semua atribut daripada pertanyaan (data) di dalam gelung 'foreach' menggunakan iterator.

Contoh 2:

Sekarang, dapatkan item dengan menyatakan atribut item dalam pengendali 'pilih'. Pertanyaannya ialah  “ daripada i di negara_harga pilih i.item ”.

//pilih operator untuk mendapatkan atribut item dalam pertanyaan
adalah data = daripada i dalam harga_negara
pilih i . item ;

untuk setiap ( adalah i dalam data )
{
Konsol . WriteLine ( i ) ;

}

Pengeluaran:

Baris # 21 – Baris # 29:

2. Di mana

Jika anda ingin menapis data berdasarkan beberapa syarat, anda boleh menggunakan operator 'di mana' dalam pertanyaan bersama-sama dengan klausa 'pilih'. Tetapi pengendali 'di mana' digunakan dahulu dan kemudian pengendali pilih ditentukan.

Sintaks:

Mari lihat cara menggunakan operator 'di mana' dalam pertanyaan LINQ.

daripada iterator dalam Sumber data
di mana syarat / s
pilih iterator . atribut ;

Contoh 1: Keadaan Bujang

Mari tapis rekod berdasarkan atribut item. Gunakan operator yang sama dengan (==) dalam operator 'where' sebagai syarat dan bandingkan iterator dengan 'Chillies'. Jadi, rekod yang berkaitan dengan 'Cili' dipilih.

Pertanyaannya ialah “ daripada i dalam harga_negara
di mana i.item == 'Cili'
pilih saya”

//pilih dengan tempat untuk menapis rekod
adalah data = daripada i dalam harga_negara
di mana i . item == 'Cili'
pilih i ;

untuk setiap ( adalah i dalam data )
{
Konsol . WriteLine ( i . item + ' ' + i . lokasi + ' ' + i . kuantiti + ' ' + i . kos ) ;

}

Pengeluaran:

Hanya terdapat satu rekod dengan item 'Chillies'.

Baris # 21 – Baris # 30:

Contoh 2: Pelbagai Syarat

Mari tapis rekod berdasarkan atribut lokasi dan kuantiti. Kuantiti hendaklah lebih daripada 50 dan kurang daripada 300. Lokasi hendaklah 'AS'.

Pertanyaannya ialah “ daripada i dalam harga_negara
di mana i.kuantiti > 50
di mana i.kuantiti < 300
di mana i.location == 'AS'
pilih saya”

//pilih dengan tempat untuk menapis rekod dengan menentukan berbilang syarat
adalah data = daripada i dalam harga_negara
di mana i . kuantiti > lima puluh
di mana i . kuantiti < 300
di mana i . lokasi == 'USA'
pilih i ;

untuk setiap ( adalah i dalam data )
{
Konsol . WriteLine ( i . item + ' ' + i . lokasi + ' ' + i . kuantiti + ' ' + i . kos ) ;

}

Pengeluaran:

Terdapat dua rekod yang sepadan dengan syarat sebelumnya.

Baris # 21 – Baris # 32:

Contoh 3: Dan (&&) Operator

Kami boleh menentukan pengendali 'dan (&&)' untuk menentukan berbilang syarat pada satu masa. Jika semua syarat adalah benar, rekod yang memenuhi semua syarat dikembalikan oleh pertanyaan.

Dalam contoh ini, kami memilih rekod jika kuantiti lebih besar daripada 20 dan kosnya ialah 67.89.

Pertanyaannya ialah “ daripada i dalam harga_negara
di mana i.kuantiti < 20 && i.kos == 67.89
pilih saya”

adalah data = daripada i dalam harga_negara
di mana i . kuantiti < dua puluh && i . kos == 67.89
pilih i ;

untuk setiap ( adalah i dalam data )
{
Konsol . WriteLine ( i . item + ' ' + i . lokasi + ' ' + i . kuantiti + ' ' + i . kos ) ;

}

Pengeluaran:

Terdapat hanya satu rekod dengan kuantiti yang kurang daripada 20 dan kos 67.89

Baris # 21 – Baris # 29:

Contoh 4: Atau (||) Operator

Pengendali “atau (||)” juga digunakan untuk menentukan berbilang syarat pada satu masa. Jika sekurang-kurangnya satu syarat adalah benar, rekod yang memenuhi syarat itu dikembalikan.

Dalam contoh ini, kami memilih rekod jika kuantiti lebih daripada 300 atau lokasinya ialah 'Tokyo'.

Pertanyaannya ialah “ daripada i dalam harga_negara
di mana i.kuantiti > 300 || i.location == “Tokyo”
pilih saya”

adalah data = daripada i dalam harga_negara
di mana i . kuantiti > 300 || i . lokasi == 'Tokyo'
pilih i ;

untuk setiap ( adalah i dalam data )
{
Konsol . WriteLine ( i . item + ' ' + i . lokasi + ' ' + i . kuantiti + ' ' + i . kos ) ;

}

Pengeluaran:

Hanya terdapat satu rekod dengan kuantiti yang melebihi 300 (syarat pertama dipadankan).

Baris # 21 – Baris # 29:

3. Pesanan Oleh

Jika anda ingin menyusun rekod yang dikembalikan oleh pertanyaan LINQ dalam susunan menaik atau menurun berdasarkan nilai dalam mana-mana atribut, anda boleh menggunakan pengendali 'pesanan mengikut' dalam pertanyaan. Anda perlu menentukan operator ini sebelum operator 'pilih'.

Sintaks:

Mari lihat cara menggunakan pengendali 'pesanan mengikut' dalam pertanyaan LINQ.

Susunan menaik:

daripada iterator dalam Sumber data
pesanan oleh iterator . atribut menaik
pilih iterator ;

Dalam susunan menurun:

daripada iterator dalam Sumber data
pesanan oleh iterator . atribut menurun
pilih iterator ;

Contoh 1: Susunan menaik

Pilih semua atribut daripada sumber data (senarai) dan kembalikannya dalam tertib menaik berdasarkan nilai dalam atribut kuantiti.

Pertanyaannya ialah “ daripada i dalam harga_negara
tertib mengikut i.kuantiti menaik
pilih saya”

adalah data = daripada i dalam harga_negara
pesanan oleh i . kuantiti menaik
pilih i ;

untuk setiap ( adalah i dalam data )
{
Konsol . WriteLine ( i . item + ' ' + i . lokasi + ' ' + i . kuantiti + ' ' + i . kos ) ;

}

Pengeluaran:

Baris # 21 – Baris # 29:

Contoh 2: Dalam susunan menurun

Pilih semua atribut daripada sumber data (senarai) dan kembalikannya dalam susunan menurun berdasarkan nilai dalam atribut kos.

Pertanyaannya ialah “ daripada i dalam harga_negara
orderby i.kos menurun
pilih saya”

adalah data = daripada i dalam harga_negara
pesanan oleh i . kos menurun
pilih i ;

untuk setiap ( adalah i dalam data )
{
Konsol . WriteLine ( i . item + ' ' + i . lokasi + ' ' + i . kuantiti + ' ' + i . kos ) ;

}

Pengeluaran:

Baris # 21 – Baris # 29:

4. Had

Had dalam SQL mengehadkan rekod yang dikembalikan oleh pertanyaan. Ia mengembalikan rekod teratas yang dikembalikan oleh pertanyaan. Dalam LINQ, kita boleh mencapainya dengan menggunakan Skip() dengan operator Take(). Take() mendapat bilangan rekod yang ditentukan. Langkau() digunakan untuk menentukan nombor rekod permulaan. Dengan cara ini, kita boleh mencapai fungsi 'had' dalam LINQ.

Sintaks:

( daripada iterator dalam Sumber data
pilih iterator ) . Langkau ( n ) . ambil ( n ) ;
  1. Skip() digunakan untuk melangkau rekod dan mengembalikan rekod yang tinggal. Ia memerlukan integer yang menentukan bilangan elemen untuk dilangkau. Dalam kes kami, ia adalah 0.
  2. Take() digunakan untuk mengambil 'n' bilangan rekod daripada rekod pertama.

Contoh:

Pilih tiga rekod pertama daripada lima rekod yang dikembalikan oleh pertanyaan.

Pertanyaannya ialah “ (daripada i dalam harga_negara
pilih i).Langkau(0).Ambil(3)”

adalah data = ( daripada i dalam harga_negara
pilih i ) . Langkau ( 0 ) . ambil ( 3 ) ;

untuk setiap ( adalah i dalam data )
{
Konsol . WriteLine ( i . item + ' ' + i . lokasi + ' ' + i . kuantiti + ' ' + i . kos ) ;

}

}

Pengeluaran:

Baris # 21 – Baris # 28:

Kesimpulan

Kami mempelajari cara menulis pertanyaan dalam C# LINQ yang serupa dengan SQL. Sebagai sebahagian daripada tutorial ini, kami membincangkan cara menggunakan operator 'pilih' untuk memilih rekod daripada sumber data. Untuk menapis rekod yang dikembalikan oleh pertanyaan, kami menggunakan pengendali 'di mana' dengan menyatakan syarat. Kemudian, kami belajar cara mengisih rekod yang dikembalikan oleh pertanyaan dengan pengendali 'pesanan mengikut'. Akhir sekali, untuk mengehadkan rekod, kami menggunakan operator Skip() dan Take().