Tôi thường sử dụng thuật ngữ entity
để đại diện cho đối tượng dữ liệu doanh nghiệp và trong tâm trí của tôi, các số linq to entities
và linq to objects
giống nhau. Điều đó có đúng không?LINQ đối với thực thể so với LINQ đối tượng - chúng có giống nhau không?
Trả lời
Đó chắc chắn là không phải như vậy.
LINQ-to-Objects là tập hợp các phương thức mở rộng trên IEnumerable<T>
cho phép bạn thực hiện các thao tác truy vấn trong bộ nhớ trên các chuỗi đối tượng tùy ý. Các phương thức chấp nhận các đại biểu đơn giản khi cần thiết.
LINQ-to-Entities là nhà cung cấp LINQ có tập hợp các phương pháp mở rộng trên IQueryable<T>
. Các phương thức xây dựng một cây biểu thức (đó là lý do tại sao các đại biểu thực sự được thông qua là Expression<>
s) và nhà cung cấp sẽ xây dựng một truy vấn SQL dựa trên việc phân tích cú pháp cây biểu thức đó.
Như một ví dụ, hãy xem xét các truy vấn sau đây:
var query1 = mydb.MyEntity.Select(x => x.SomeProp).Where(x => x == "Prop");
var query2 = mydb.MyEntity.Select(x => x.SomeProp).AsEnumerable().Where(x => x == "Prop");
Truy vấn đầu tiên là sẽ xây dựng một cây biểu hiện bao gồm một lựa chọn và một nơi, với hai lambdas thực sự coi là LambdaExpression
s. Nhà cung cấp LINQ-to-Entities sẽ dịch thành SQL mà cả hai lựa chọn và bộ lọc.
Truy vấn thứ hai chèn AsEnumerable()
, sẽ buộc phần còn lại của truy vấn sử dụng LINQ-to-Objects. Trong trường hợp đó, nhà cung cấp sẽ tạo ra SQL dựa trên chỉ lựa chọn, trả về tất cả các bản ghi đó từ cơ sở dữ liệu, và sau đó việc lọc sẽ xảy ra trong bộ nhớ. Rõ ràng, điều đó có khả năng sẽ chậm hơn nhiều.
là có cách nào để lọc trên cả hai điều kiện cho một truy vấn LINQ đối tượng hoặc nó luôn thu hẹp xuống hành động đầu tiên trước khi xử lý kế tiếp? –
Nó phụ thuộc; nếu bạn chỉ muốn nhận * tất cả * các bản ghi từ một cơ sở dữ liệu và sau đó thực hiện các hành động trên chúng trong bộ nhớ, bạn có thể đặt 'AsEnumerable()' * trước * the 'Select()' và sau đó thực hiện những gì bạn muốn. Nói chung, mặc dù, đó là một ý tưởng tốt hơn để giữ cho mọi thứ riêng biệt. Nếu bạn có một 'IEnumerable
@dlev bạn không trả lời những gì anh ta hỏi. –
LINQ đối với các thực thể được dự định sẽ được sử dụng với Khuôn khổ thực thể trong khi LINQ đối tượng là cho bất kỳ bộ sưu tập IEnumerable nào.
Thông tin chi tiết:
Linq2Entities là viết tắt của truy vấn dữ liệu thông qua ADO.NET Entity Framework (Database)
Linq2Objects đứng để truy vấn dữ liệu trong bộ nhớ (đối tượng địa phương).
L2o dành cho đối tượng trong bộ nhớ. L2e truy vấn cơ sở dữ liệu.
LINQ to Objects Thuật ngữ "LINQ to Objects" đề cập đến việc sử dụng các truy vấn LINQ với bất kỳ bộ sưu tập IEnumerable hay IEnumerable trực tiếp, mà không cần dùng một nhà cung cấp LINQ trung gian hoặc API như LINQ to SQL hay LINQ to XML. Bạn có thể sử dụng LINQ để truy vấn bất kỳ tập hợp liệt kê nào như Danh sách, Mảng hoặc Từ điển. Bộ sưu tập có thể do người dùng xác định hoặc có thể được trả về bởi .NET Framework API.
Theo nghĩa cơ bản, LINQ to Objects thể hiện một cách tiếp cận mới đối với các bộ sưu tập. Theo cách cũ, bạn phải viết các vòng lặp foreach phức tạp đã chỉ định cách lấy dữ liệu từ một bộ sưu tập. Trong phương pháp LINQ, bạn viết mã khai báo mô tả những gì bạn muốn truy xuất.
ref: http://msdn.microsoft.com/en-us/library/bb397919.aspx
LINQ to Entity LINQ to Entities cung cấp hỗ trợ ngôn ngữ-Integrated Query (LINQ) cho phép các nhà phát triển để viết truy vấn đối với các mô hình khái niệm Entity Framework sử dụng Visual Basic hoặc Visual C#. Các truy vấn đối với khung thực thể được biểu diễn bằng các truy vấn cây lệnh, thực thi đối với ngữ cảnh đối tượng. LINQ to Entities chuyển đổi các truy vấn Language-Integrated Queries (LINQ) thành các truy vấn cây lệnh, thực hiện các truy vấn đối với Entity Framework và trả về các đối tượng có thể được sử dụng bởi cả Entity Framework và LINQ. Sau đây là quy trình tạo và thực hiện truy vấn LINQ to Entities: Tham khảo: http://msdn.microsoft.com/en-us/library/bb386964.aspx
- 1. Đối với Linq - Hiệu suất so với Tương lai
- 2. Điều khoản động trong LINQ đối với các thực thể
- 3. Có thể Serialize một đối tượng LINQ không?
- 4. Sự khác biệt không hoạt động với LINQ đối tượng
- 5. LINQ động (đối với thực thể) Ở đâu có cột DateTime không thể sử dụng
- 6. LINQ OrderBy đối tượng ẩn danh với phép so sánh chiếu
- 7. kiểm tra hai trường hợp đối tượng để xem chúng có giống nhau không
- 8. LINQ Bao gồm so với Tham gia. Chúng có tương đương không?
- 9. đối sánh spl_object_hash, đối tượng không giống nhau
- 10. Các tháng năm khác biệt với LINQ (đối với các thực thể)
- 11. LINQ to đối tượng khi đối tượng là null VS LINQ to SQL
- 12. Điều khoản "Chọn KHÔNG IN" trong LINQ đối với các thực thể
- 13. LINQ SUM trên các đối tượng?
- 14. Các đối tượng miền có giống với các thực thể JPA không?
- 15. Trong tuyên bố cho LINQ đối tượng
- 16. tên đối tượng giống với tên hàm?
- 17. Thêm ngày trong LINQ vào đối tượng
- 18. LINQ Có phương pháp cho một đối tượng
- 19. Đối tượng miền - "Đối tượng thông minh" so với POCO
- 20. Đối tượng kinh doanh so với các đối tượng
- 21. LINQ OrderBy so với các giá trị cụ thể
- 22. LINQ ràng buộc so với liên tục LINQ
- 23. Tạo một biểu thức LINQ mà thông số tương đương với đối tượng
- 24. Cách bao gồm một hàng cụ thể từ một bảng khác với LINQ đến đối tượng
- 25. Object với LINQ
- 26. LINQ to NHibernate so với ICriteria
- 27. Đối tượng ngữ cảnh LINQ không đăng ký như một loại đối tượng System.IDisposable
- 28. System.ComponentModel.BindingList: Thêm (đối tượng) so với AddNew()
- 29. LINQ: Làm thế nào để chuyển đổi đối tượng phân cấp lồng nhau để làm phẳng đối tượng
- 30. LINQ to SQLQL đối tượng ánh xạ đối tượng miền và hiệu suất
Xem thêm: LINQ là gì? http://stackoverflow.com/questions/471502/what-is-linq/471592#471592 –