Tôi có một bảng:Khi nào tôi nên sử dụng một CompiledQuery?
-- Tag
ID | Name
-----------
1 | c#
2 | linq
3 | entity-framework
Tôi có một lớp học mà sẽ có các phương pháp sau:
IEnumerable<Tag> GetAll();
IEnumerable<Tag> GetByName();
Tôi có nên sử dụng một truy vấn biên soạn trong trường hợp này?
static readonly Func<Entities, IEnumerable<Tag>> AllTags =
CompiledQuery.Compile<Entities, IEnumerable<Tag>>
(
e => e.Tags
);
Sau đó, phương pháp GetByName
của tôi sẽ là:
IEnumerable<Tag> GetByName(string name)
{
using (var db = new Entities())
{
return AllTags(db).Where(t => t.Name.Contains(name)).ToList();
}
}
nào tạo ra một SELECT ID, Name FROM Tag
và thực hiện Where
trên mã. Hoặc tôi có nên tránh CompiledQuery
trong trường hợp này không?
Về cơ bản, tôi muốn biết khi nào nên sử dụng các truy vấn được biên dịch. Ngoài ra, trên một trang web họ được biên dịch chỉ một lần cho toàn bộ ứng dụng?
Ví dụ bạn đưa ra sẽ thất bại khi chạy (bạn phải chuyển ngữ cảnh, và bạn không thể sử dụng 'Func <>' không có 'Expression <>'. Ngoài ra, tiếp tục soạn truy vấn ('Where (t =) > ... ')" decompiles "kết quả, nhưng câu hỏi là hợp lệ –
Trong .net 4.5 nó sẽ được thực hiện tự động.Xem" Entity Framework 5: Kiểm soát biên dịch truy vấn tự động "http://blogs.msdn.com/ b/stuartleeks/lưu trữ/2012/06/12/tổ chức-khuôn khổ-5-kiểm soát-tự động-truy vấn-compilation.aspx) –