Saya punya daftar orders
.
Saya ingin memilih orders
berdasarkan serangkaian status pesanan.
Jadi intinya select orders where order.StatusCode in ("A", "B", "C")
// Filter the orders based on the order status
var filteredOrders = from order in orders.Order
where order.StatusCode.????????("A", "B", "C")
select order;
Jawaban:
Kode status Anda juga merupakan koleksi, jadi gunakan
Contains
:atau dalam sintaks kueri:
sumber
sumber
NB: ini adalah LINQ untuk objek, saya tidak 100% yakin apakah itu bekerja di LINQ ke entitas, dan tidak punya waktu untuk memeriksanya sekarang. Sebenarnya tidak terlalu sulit untuk menerjemahkannya menjadi x dalam [A, B, C] tetapi Anda harus memeriksanya sendiri.
Jadi, alih-alih Berisi sebagai pengganti ???? dalam kode Anda, Anda dapat menggunakan Apa saja yang lebih LINQ-uish:
Ini kebalikan dari apa yang Anda ketahui dari SQL. Itulah mengapa tidak begitu jelas.
Tentu saja, jika Anda lebih memilih sintaks yang lancar di sini adalah:
Di sini kita kembali melihat salah satu kejutan LINQ (seperti Joda-speech yang menempatkan pilih di akhir). Namun cukup logis dalam hal ini memeriksa apakah setidaknya salah satu item (yaitu ada ) dalam daftar (set, koleksi) cocok dengan nilai tunggal.
sumber
Coba dengan
Contains
fungsi;sumber
Hanya hati-hati,
.Contains()
akan cocok dengan semua substring termasuk string yang tidak Anda harapkan. Untuk misalnya.new[] { "A", "B", "AA" }.Contains("A")
akan mengembalikan A dan AA yang mungkin tidak Anda inginkan. Saya telah digigit olehnya..Any()
atau.Exists()
pilihan yang lebih amansumber