2008-11-11 36 views
6

Chúng tôi có chức năng vô hướng trong cơ sở dữ liệu của chúng tôi để trả về những thứ như "số lượng nhiệm vụ cho khách hàng" hoặc "tổng số tiền hóa đơn cho khách hàng".Có thể sử dụng/truy cập các chức năng vô hướng với LINQ to SQL không?

Chúng tôi đang thử nghiệm và cố gắng thực hiện điều này với các thủ tục được lưu trữ ... thông thường chúng tôi sẽ chỉ gọi hàm này trong quy trình được lưu trữ và trả về dưới dạng một giá trị duy nhất.

Có cách nào để sử dụng hoặc truy cập các chức năng vô hướng với LINQ to SQL không? Nếu vậy, tôi sẽ quan tâm xem một ví dụ về làm thế nào để ... nếu không, làm thế nào nó sẽ là tốt nhất để xử lý loại tình hình ... nếu nó thậm chí còn khả thi.

Trả lời

9

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.

1

Tôi tin rằng this MSDN documentation là những gì bạn đang theo dõi (như một phần của this wider topic of calling user-defined functions in LINQ to SQL). Không thể nói tôi đã tự làm điều đó, nhưng có vẻ đúng ...

+0

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

+1

@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 ... –

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