Saya mencoba menggunakan .distinct di Linq untuk mendapatkan hasil berdasarkan pada satu bidang tabel (jadi tidak memerlukan seluruh rekaman yang digandakan dari tabel).
Saya tahu menulis kueri dasar menggunakan berbeda sebagai berikut:
var query = (from r in table1
orderby r.Text
select r).distinct();
tapi saya butuh hasil di mana r.text
tidak digandakan.
Jawaban:
Coba ini:
Ini akan mengelompokkan tabel dengan
Text
dan menggunakan baris pertama dari masing-masing kelompok sehingga menghasilkan barisText
yang berbeda.sumber
table1.GroupBy(x => new { x.Text, x.Property2, x.Property3 }).Select(x => x.First());
GroupBy
tidak membuat grup kosong, lihat komentar saya sebelumnya. Kemungkinan besar, kode Anda mengandung lebih dari apa yang Anda lihat di sini. Mungkin Anda memilikiWhere
juga atau kondisi untukFirst
.MoreLinq memiliki metode DistinctBy yang dapat Anda gunakan:
Ini akan memungkinkan Anda untuk melakukan:
Implementasi metode (singkat validasi argumen) adalah sebagai berikut:
sumber
GroupBy
kebutuhan juga. Kedua metode akan menggunakan defaultEqualityComparer
jika tidak ada yang disediakan.Kedengarannya seperti Anda menginginkan ini:
Ini akan memilih baris tempat yang
Text
unik.sumber
Jawaban Daniel Hilgarth di atas mengarah ke
System.NotSupported
pengecualian With Entity-Framework . Dengan Entity-Framework , harus:sumber
Ada banyak diskusi seputar topik ini.
Anda dapat menemukannya di sini :
Salah satu saran paling populer adalah metode Distinct yang menggunakan ekspresi lambda sebagai parameter seperti yang ditunjukkan oleh @Servy.
Arsitek kepala C #, Anders Hejlsberg telah menyarankan solusi di sini . Juga menjelaskan mengapa tim desain kerangka kerja memutuskan untuk tidak menambahkan kelebihan metode Distinct yang membutuhkan lambda.
sumber
Dari apa yang saya temukan, permintaan Anda sebagian besar benar. Cukup ubah "select r" menjadi "select r.Text" adalah segalanya dan itu akan menyelesaikan masalah. Ini adalah bagaimana MSDN mendokumentasikan cara kerjanya.
Ex:
sumber
sumber
coba kode ini:
sumber
Anda dapat mencoba ini:
table1.GroupBy(t => t.Text).Select(shape => shape.r)).Distinct();
sumber