2008-10-17 40 views
15

Giả sử tôi có một bảng có một cột dữ liệu kiểu XML. Trong SQL, tôi có thể thực hiện câu lệnh sau:Sử dụng XQuery trong LINQ to SQL?

select top 10 *, 
     Content.value('(/root/item/value)[1]', 'float') as Value 
from  xmltabletest 
where Content.value('(/root/item/MessageType)[1]', 'int') = 1 

Tập kết quả chỉ chứa các bản ghi khớp với tiêu chí và trích xuất một giá trị từ XML thành cột được gọi là 'Giá trị'. Đẹp và đơn giản.

Có thể đạt được điều tương tự với LINQ to SQL không?

Tôi muốn SQL thực hiện việc nâng hạng nặng và chỉ trả về dữ liệu phù hợp với tiêu chí của tôi thay vì phải chọn, chuyển và sau đó xử lý một đoạn dữ liệu khổng lồ. Theo như tôi có thể nói điều này là không thể vào lúc này, nhưng tôi nghĩ tôi nên hỏi.

(Môi trường là .NET 3.5, VS2008, SQL Server 2005 nếu điều đó giúp)

+0

Tôi đã gặp các vấn đề tương tự và phải thực hiện nó bằng cách sử dụng các procs được lưu trữ hoặc thực hiện các truy vấn xquery thông qua datacontext –

+0

Thực ra, chúng tôi sẽ sử dụng phương thức ngữ cảnh dữ liệu. Loại hút, nhưng nó được công việc làm và chúng tôi chỉ có một thực thể với một cột XML. Nên dễ dàng để giữ sạch sẽ và có tổ chức. –

Trả lời

5

Tôi không chắc chắn chính xác nếu điều này là hết hạn bây giờ, nhưng theo Scott Guthrie kiểu dữ liệu XML là:

được trình bày dưới dạng các chuỗi trong LINQ to SQL Thực thể. Bạn có thể sử dụng XLINQ để truy vấn trên cột XML trong LINQ to quyền truy cập SQL của bạn - nhưng truy vấn này sẽ xảy ra ở tầng giữa của bạn (trong phạm vi ASP.NET). Bạn không thể thực thi một truy vấn từ xa XQuery đối với cơ sở dữ liệu và lọc kết quả trả về dựa trên kết quả đó trong bản phát hành đầu tiên .

Vì vậy, để trả lời cho câu hỏi của bạn, tôi muốn nói "không".