2010-05-05 5 views
5

Tôi đang tìm danh sách đầy đủ các phương thức mở rộng LINQ được hỗ trợ tương thích với Dịch vụ Dữ liệu WCF.Hỗ trợ LINQ cho Dịch vụ Dữ liệu WCF

Bằng thử nghiệm và lỗi Tôi đã tìm thấy Đầu tiên (Func) và Đơn (Func) không được hỗ trợ, bất kỳ mục đích nào khác?

This mang đến cho tôi một ý tưởng hay về những gì được hỗ trợ, tôi chỉ không biết những gì được dịch thực sự qua IQueryProvider.

+0

Các liên kết đi đến "Chủ đề này không còn có sẵn" – mikalai

Trả lời

1

Tìm kiếm của bạn thực sự thú vị - đặc biệt nếu bạn xem tài liệu MSDN Querying the Data Service (WCF Data Services).

Trong đoạn đầu tiên, tình trạng tài liệu:


Một truy vấn được thực hiện trong các tình huống sau:

  • Khi kết quả được liệt kê ngầm, chẳng hạn như:
    • Khi một thuộc tính trên DataServiceContext đại diện và bộ thực thể được liệt kê, chẳng hạn như trong vòng lặp foreach (C#) hoặc Cho mỗi (Visual Basic).
    • Khi truy vấn được gán cho bộ sưu tập Danh sách.
    • Khi phương thức Execute hoặc BeginExecute được gọi một cách rõ ràng.
    • Khi toán tử thực hiện truy vấn LINQ, chẳng hạn như First hoặc Single được gọi là.

Một vài dòng tiếp tục xuống, có một "Lưu ý" hộp vàng trong đó nêu:

Note

Tập hợp các truy vấn có thể biểu trong cú pháp LINQ rộng hơn các kích hoạt ở trạng thái đại diện chuyển (REST) dựa trên cú pháp URI mà được sử dụng bởi các dịch vụ dữ liệu. A NotSupportedException được nâng lên khi truy vấn không thể được ánh xạ tới một URI trong dịch vụ dữ liệu đích.

Thật không may, tôi không thể tìm thấy danh sách rõ ràng về toán tử nào trong cú pháp LINQ hoặc không được hỗ trợ bởi Dịch vụ dữ liệu WCF - thiếu rõ ràng trong tài liệu!

+0

Cảm ơn, tôi đã gọi điện thoại đầu tiên() và Đơn() với thông số Func . Những người đó vẫn đang ném lỗi. Đầu tiên() là làm việc tuyệt vời mặc dù. Vẫn đang tìm kiếm danh sách đó. ;) – jfar

2

Đầu và Single không được hỗ trợ cho Silverlight vì Silverlight đòi hỏi tất cả các mạng được thực hiện async, nhưng bạn có thể mô phỏng nó với mã như thế này

NorthwindEntities context = new NorthwindEntities(new Uri("Northwind.svc", UriKind.Relative)); 
DataServiceQuery<Order> q = (DataServiceQuery<Order>)context.Orders.Take(1); 
q.BeginExecute((IAsyncResult ar) => 
    { 
     var o = ((DataServiceQuery<Order>)q).EndExecute(ar).First(); 
     txtOutput.Text = o.OrderID.ToString(); 
    }, null); 

Trong mã này, bạn đang yêu cầu chỉ có một được gửi qua mạng với Take (1), và sau đó một khi nó đã có trên máy khách bằng cách sử dụng First() hoặc Single() để dễ dàng có được tham chiếu singleton.

Không có danh sách cuối cùng về các toán tử LINQ được hỗ trợ có sẵn mà tôi biết.

Jeff

+0

Bốn năm sau và đây vẫn là cách duy nhất để nhận hỗ trợ First() và Single() cho các dịch vụ dữ liệu WCF. Ugh. –