Entity Framework pilih nama yang berbeda


Jawaban:


277

Menggunakan ekspresi lambda ..

 var result = EFContext.TestAddresses.Select(m => m.Name).Distinct();

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>.


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.


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


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

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();

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);

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);                    
                }

            }
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.