2011-08-25 37 views

Trả lời

42

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

+1

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? –

+1

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 ', thì bạn sẽ sử dụng LINQ-to-Objects. Nếu không, thì cơ sở dữ liệu sẽ có khả năng hiệu quả hơn. – dlev

+0

@dlev bạn không trả lời những gì anh ta hỏi. –

7

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:

  1. Linq to Entities
  2. Linq to Objects
2

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

10

L2o dành cho đối tượng trong bộ nhớ. L2e truy vấn cơ sở dữ liệu.

7

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

Các vấn đề liên quan