LINQ-to-SQL hỗ trợ sử dụng với UDF, nếu đó là ý của bạn. Chỉ cần kéo UDF lên bề mặt thiết kế và bạn đã hoàn tất. Điều này tạo ra một phương thức phù hợp trên bối cảnh dữ liệu, đánh dấu [Function(..., IsComposable=true)]
hoặc tương tự, nói LINQ-to-SQL rằng nó có thể sử dụng trong truy vấn (lưu ý rằng EF không hỗ trợ việc sử dụng này).
Sau đó, bạn sẽ sử dụng nó trong truy vấn của bạn như:
var qry = from cust in ctx.Custs
select new {Id = cust.Id, Value = ctx.GetTotalValue(cust.Id)};
mà sẽ trở thành TSQL cái gì đó như:
SELECT t1.Id, dbo.MyUdf(t1.Id)
FROM CUSTOMER t1
(hoặc có-SME).
Thực tế là nó có nghĩa là bạn có thể sử dụng giá trị trong truy vấn - ví dụ trong Where()
/WHERE
- và do đó giảm bớt dữ liệu được đưa từ máy chủ (mặc dù rõ ràng UDF sẽ vẫn cần phải được thực thi một số cách).
Here's a similar example, hiển thị giả UDF khi sử dụng trên ngữ cảnh dữ liệu, minh họa rằng phiên bản C# của phương pháp không được sử dụng.
Thực ra, hiện tại tôi đang xem các UDF để cung cấp dữ liệu "ngoài mô hình" theo cách tổng hợp - tức là một phần cụ thể của hệ thống cần truy cập vào một số dữ liệu (có cùng cơ sở dữ liệu) không thực sự là một phần của cùng một mô hình, nhưng tôi muốn JOIN
theo những cách thú vị. Tôi cũng có các SP hiện tại cho mục đích này ... vì vậy tôi đang xem xét việc chuyển các SP đó thành các UDF bảng, cung cấp một mức hợp đồng/trừu tượng xung quanh dữ liệu ngoài mô hình. Vì nó không phải là một phần của mô hình của tôi, tôi chỉ có thể lấy nó thông qua UDF - nhưng tôi vẫn giữ khả năng soạn thảo điều này với mô hình thông thường của mình.
Nguồn
2008-11-11 15:33:15
Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. – gotqn
@gotqn: Thật vậy, và tôi chắc chắn sẽ làm như vậy hôm nay. Hãy nhớ rằng câu trả lời này đã được đăng trong giai đoạn trứng của Stack Overflow ... –