2012-06-28 19 views
6

Tôi đang tìm cách tạo một hàm có thể được sử dụng trong các truy vấn LINQ của tôi sẽ dịch sang SQL. Quay lại khi chúng tôi đang sử dụng LINQ to SQL, tôi đặt ra một số question tương tự. Câu trả lời là ánh xạ tới một UDF trong db. Chúng tôi đang sử dụng mô hình mã đầu tiên vì sự sạch sẽ của định nghĩa mô hình, nhưng tiếc là không có cách nào để define functions, ánh xạ tới chức năng và ánh xạ tới procs được lưu trữ theo như tôi có thể biết (tôi đoán ý tưởng là mã đó trước tiên nên tạo db, và tôi không nên thêm những thứ vào nó). Có vẻ như không có quy mô lớn với tôi, vì nó cho phép không có phương pháp dễ dàng để đối phó với sự thiếu hiệu quả có thể phát triển theo thời gian, nhưng đó không phải ở đây cũng không ...Mã EF Đầu tiên: Các phương thức có thể dịch sang SQL

Dù sao, tôi biết tôi có thể định nghĩa biểu thức vị ngữ sẽ dịch to SQL mà tôi có thể sử dụng trong các truy vấn tôi như vậy:

public static Expression<Func<MyEntity, bool>> FilterMe(int comparisonNumber) 
{ 
    return x => x.SomeProperty == comparisonNumber; 
} 

var query = MyEntities.Where(FilterMe(1)); 

là chỉ có thể này cho Expressions mà trở bool? Tôi đang tìm một cái gì đó dọc theo dòng:

var query = from m in MyEntities 
      let endDate = GetEndDate(m.Start, m.Duration) 
      where endDate <= DateTime.Now 
      select m; 

Có một số cách để xây dựng GetEndDate trong một chức năng biểu hiện? Mã trong vòng GetEndDate dịch sang SQL chỉ tốt khi tôi viết nó dài trong truy vấn, nhưng nó khá dài và khó đọc.

Chỉnh sửa - Oh và trước khi ai đó trả lời bằng "Sử dụng các hàm SQL cho DateAdd", ví dụ của tôi chỉ là ví dụ đó. Có vô số cách khác tôi muốn sử dụng. Cảm ơn trước.

+0

Bạn đã thử chưa? tức là, trả về một 'Expression >' và thực hiện truy vấn 'ở đâu GetEndDate (m) <= DateTime.Now'. – mellamokb

+0

Có, và điều đó sẽ không hoạt động. Bạn sẽ nhận được một cái gì đó dọc theo dòng "Không thể so sánh' Biểu thức > 'và' DateTime' ". – Ocelot20

+0

Bạn đã thử câu trả lời của tôi chưa? – Guillaume86

Trả lời

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