Entity Framework chọn tên riêng


137

Làm thế nào tôi có thể thực hiện SQLtruy vấn này với Entity Framework?

SELECT DISTINCT NAME FROM TestAddresses

Câu trả lời:


270

Sử dụng biểu thức lambda ..

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

1
Có thể là một câu hỏi daft, nhưng điều này có trả lại tất cả các địa chỉ cho lớp mã C # và sau đó lọc chúng không, hoặc điều này có chuyển truy vấn thích hợp đến máy chủ cơ sở dữ liệu để chỉ trả về các giá trị duy nhất không?
DA

51

Thử cái này:

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

Điều này sẽ cung cấp cho bạn một IEnumerable<string>- bạn có thể gọi .ToList()nó để có được một List<string>.


1
Bằng cách đó có được hiệu suất tốt hơn so với nhóm. Phân biệt: Thời gian thực thi của SQL Server: Thời gian CPU = 0 ms, thời gian trôi qua = 50 ms. Phân nhóm: Thời gian thực thi máy chủ SQL: Thời gian CPU = 0 ms, thời gian trôi qua = 112 ms.
Andre Mendonca

24

Cách mà @alliswell thể hiện là hoàn toàn hợp lệ, và có một cách khác! :)

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

Tôi hy vọng nó sẽ hữu ích cho ai đó.


1
điều này rất hữu ích đối với tôi vì tôi cần chọn nhiều cột
mamashare

16
DBContext.TestAddresses.Select(m => m.NAME).Distinct();

nếu bạn có nhiều cột làm như thế này:

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

Trong ví dụ này không có CategoryId trùng lặp và không có CategoryName tôi hy vọng điều này sẽ giúp bạn


4

Entity-Framework Chọn Tên riêng biệt:

Giả sử nếu bạn đang sử dụng Chế độ xem trong đó bạn đang sử dụng nhiều bảng và bạn muốn áp dụng riêng biệt trong trường hợp đó trước tiên, bạn phải lưu trữ giá trị trong biến & sau đó bạn có thể áp dụng Phân biệt trên biến đó như thế này ....

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

Hoặc bạn có thể thử ví dụ đơn giản này

Public Function GetUniqueLocation() As List(Of Integer)
          Return db.LoginUsers.Select(Function(p) p.LocID).Distinct().ToList()
End Function

Xin chào, khi tôi làm điều này trên một bảng, tôi gặp lỗi -> không thể chuyển đổi chuỗi thành IEnumreable .. bạn có thể chỉ cho tôi cách lấy danh sách để tôi có thể điền danh sách thả xuống, với các giá trị riêng biệt từ cột bảng có chứa NVARCHAR trong DB DB.
aggie

3

sử dụng Chọn ().

Ví dụ ()

DBContext db = new DBContext();
var data= db.User_Food_UserIntakeFood .Select( ).Distinct();

2

Để tránh ORDER BY items must appear in the select list if SELECT DISTINCTlỗi, tốt nhất nên là

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

1

Entity-Framework Chọn Tên riêng biệt:

Giả sử nếu bạn muốn mọi dữ liệu đầu tiên của cột cụ thể của mỗi nhóm;

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

            }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.