Entity Framework pilih nama yang berbeda

140

Bagaimana saya bisa melakukan SQLkueri ini dengan Entity Framework?

SELECT DISTINCT NAME FROM TestAddresses
patrick
sumber

Jawaban:

277

Menggunakan ekspresi lambda ..

 var result = EFContext.TestAddresses.Select(m => m.Name).Distinct();
py2020
sumber
2
Mungkin pertanyaan bodoh, tetapi apakah ini mengembalikan semua alamat ke lapisan kode C # dan kemudian memfilternya, atau apakah ini meneruskan kueri yang sesuai ke server database untuk mengembalikan hanya nilai unik?
DA
apa yang akan menjadi jenis data hasil
Souradeep Banerjee-AIS
@DA EF akan meneruskan kueri yang sesuai ke DB. stackoverflow.com/questions/37595253/…
py2020
52

Coba ini:

var results = (from ta in context.TestAddresses
               select ta.Name).Distinct();

Ini akan memberi Anda IEnumerable<string>- Anda dapat memanggilnya .ToList()untuk mendapatkan List<string>.

marc_s
sumber
1
Dengan begitu mendapatkan performa yang lebih baik daripada pengelompokan. Berbeda: Waktu Eksekusi SQL Server: Waktu CPU = 0 ms, waktu berlalu = 50 ms. Pengelompokan: Waktu Eksekusi SQL Server: waktu CPU = 0 ms, waktu berlalu = 112 ms.
Andre Mendonca
25

Cara yang ditunjukkan @alliswell sepenuhnya valid, dan ada cara lain! :)

var result = EFContext.TestAddresses
    .GroupBy(ta => ta.Name)
    .Select(ta => ta.Key);

Saya berharap ini akan bermanfaat bagi seseorang.

Kim Tranjan
sumber
1
ini sangat berguna bagi saya karena saya perlu memilih beberapa kolom
mamashare
17
DBContext.TestAddresses.Select(m => m.NAME).Distinct();

jika Anda memiliki banyak kolom lakukan seperti ini:

DBContext.TestAddresses.Select(m => new {m.NAME, m.ID}).Distinct();

Dalam contoh ini tidak ada duplikat CategoryId dan tidak ada CategoryName saya harap ini akan membantu Anda

Muhammad Asad
sumber
4

Entity-Framework Pilih Nama Berbeda:

Misalkan jika Anda menggunakan Tampilan di mana Anda menggunakan beberapa tabel dan Anda ingin menerapkan perbedaan dalam kasus itu terlebih dahulu Anda harus menyimpan nilai dalam variabel & kemudian Anda dapat menerapkan Berbeda pada variabel itu seperti ini ....

public List<Item_Img_Sal_VIEW> GetItemDescription(int ItemNo) 
        {
            var Result= db.Item_Img_Sal_VIEW.Where(p => p.ItemID == ItemNo).ToList();
            return Result.Distinct().ToList();
        }

Atau Anda dapat mencoba Contoh Sederhana ini

Public Function GetUniqueLocation() As List(Of Integer)
          Return db.LoginUsers.Select(Function(p) p.LocID).Distinct().ToList()
End Function
Abdul Khaliq
sumber
Hai, ketika saya melakukan ini di atas meja, saya mendapatkan kesalahan -> tidak dapat mengonversi string ke IEnumreable .. dapatkah Anda menunjukkan cara mendapatkan daftar sehingga saya dapat mengisi daftar tarik-turun, dengan nilai yang berbeda dari kolom tabel yang berisi NVARCHAR di EF DB.
aggie
3

gunakan Select (). Distinct ()

misalnya

DBContext db = new DBContext();
var data= db.User_Food_UserIntakeFood .Select( ).Distinct();
Hossein Hajizadeh
sumber
2

Untuk menghindari ORDER BY items must appear in the select list if SELECT DISTINCTkesalahan, seharusnya yang terbaik

var results = (
    from ta in DBContext.TestAddresses
    select ta.Name
)
.Distinct()
.OrderBy( x => 1);
pemenang
sumber
1

Entity-Framework Pilih Nama Berbeda:

Misalkan jika Anda menginginkan setiap data pertama dari kolom tertentu dari setiap grup;

 var data = objDb.TableName.GroupBy(dt => dt.ColumnName).Select(dt => new { dt.Key }).ToList();

            foreach (var item in data)
            {
                var data2= objDb.TableName.Where(dt=>dt.ColumnName==item.Key).Select(dt=>new {dt.SelectYourColumn}).Distinct().FirstOrDefault();

               //Eg.
                {
                       ListBox1.Items.Add(data2.ColumnName);                    
                }

            }
Prajapati Gautam
sumber