2015-12-18 21 views
8

Tôi muốn nhận được dịch LINQ truy vấn lập trình và làm một số công cụ với cú pháp Sql đó.Nơi tìm thấy dịch LINQ to Entity query sang Sql

Giả sử đây là mã của tôi:

public class MyApiController:ApiController 
{ 
    public IQueryable<object> Get() 
    { 
     var objs=Context.Objexts.Where(m=>m.Id>10); 
     return objs; 
    } 
} 

Tôi muốn tìm và nhận được cú pháp Sql như:

SELECT * FROM dbo.Objexts where Id > 10 
+0

Đừng có được những gì bạn muốn làm. Tại sao nhận được truy vấn SQL được tạo từ một LINQ? – jpgrassi

+0

Cũng không hiểu tại sao bạn muốn làm điều đó, bạn có thể thiết lập truy vấn bằng mã, tại sao bạn muốn thay đổi truy vấn thực tế? – Theunis

Trả lời

8

Bạn có thể gọi phương thức ToString() trên objs. Điều này sẽ dẫn đến một cuộc gọi đến ToTraceStringmethod mà trả về SQL thực hiện:

string sql = objs.ToString(); 
+0

sql sẽ trở về từ ToString luôn luôn là một câu lệnh sql hoàn chỉnh không có tham số? Nếu tôi sử dụng .Where (c => c == "abc '; xóa từ othertable;"), sẽ sql kết quả được đảm bảo để được tiêm sql an toàn? – MathiasR

+0

Một khái niệm tầm thường nhưng quan trọng như vậy. Một nửa số lần chúng tôi sẽ bắt đầu cấu hình truy vấn sql để giữ lại văn bản truy vấn bị sa thải trên cá thể máy chủ sql. Ngọt! – RBT

6

tùy chọn khác nếu bạn đang sử dụng Entity Framework 6 là sử dụng tính năng mới để đăng nhập whats là xảy ra, bạn có thể lấy t-sql và thời gian truy vấn :

Logging and Intercepting Database Operations

using (var context = new BlogContext()) 
{ 
    context.Database.Log = Console.Write; //here, you can write this info to a text file for example. 

    // Your code here... 
} 
+0

Đó là lựa chọn tốt nhất !!! Rất đẹp. –