2010-08-02 34 views
6

Tôi đang cố gắng để yêu cầu dịch vụ OData tôi:Collection Tồn tại Tiêu chuẩn trong WCF Data Services

"Hãy cho tôi tất cả các sản phẩm mà không có một loại"

với các sản phẩm và loại có một mối quan hệ m2m .

Tôi đã thử:

from p in Products 
where p.Categories == null 
select p 

from p in Products 
where !p.Categories.Any() 
select p 

from p in Products 
where p.Categories.Count == 0 
select p 

nhưng tất cả các trường hợp ngoại lệ cho tôi không được hỗ trợ.


Tôi không tìm kiếm giải pháp thay thế hoặc tùy chọn. Vui lòng không trả lời với các tùy chọn khác.

Trả lời

2

này không được hỗ trợ:

http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataservices/thread/b505d630-c808-4bde-b08e-3ce1dd17f621/

Các OData ngôn ngữ truy vấn URL hiện không hỗ trợ kiểu này truy vấn. Như kết quả là bộ xử lý LINQ của khách hàng cũng không hỗ trợ. Nếu bạn nghĩ rằng có giá trị để thêm chức năng như vậy, vui lòng sử dụng trang web kết nối của chúng tôi để đề xuất tính năng, nó làm cho công việc lập kế hoạch của chúng tôi dễ dàng hơn trong thời gian tới xung quanh. https://connect.microsoft.com/dataplatform/content/content.aspx?ContentID=15540&wa=wsignin1.0

Giải pháp thay thế bạn có thể sử dụng hoạt động dịch vụ . Xác định dịch vụ hoạt động trả về IQueryable (do đó mà bạn có thể soạn thêm một số truy vấn khác toán tử do kết quả từ ứng dụng ) và sử dụng phía máy chủ nhà cung cấp để đưa ra truy vấn ở trên.

2

Trải nghiệm của tôi với Dịch vụ dữ liệu WCF là tập hợp con khách của LINQ để nghỉ là thiếu.

Tùy chọn thiên vị của tôi sẽ chỉ di chuyển nó sang phía máy chủ nơi bạn có quyền truy cập vào việc triển khai đầy đủ LINQ để lôi kéo? (hoặc bất kỳ thứ gì bạn đang sử dụng để triển khai Dịch vụ Dữ liệu của bạn).

[WebGet] 
public IQueryable<Products> GetProductsWithoutCategories(){ 
    /*start psudo code 
     from p in Products 
     where p.Categories.Count == 0 
     select p 


    */ 

} 
+0

Máy khách thực sự không hỗ trợ loại truy vấn này, bởi vì ngôn ngữ truy vấn URL không hỗ trợ nó. Các giải pháp với một hoạt động dịch vụ như được đăng trên là một trong những tốt mặc dù. –

0

Giải pháp của tôi cho vấn đề này là $ mở rộng lĩnh vực liên quan trong truy vấn, và sau đó kiểm tra nếu trường đó là trống hay không ...

JArray _array = (JArray)main_table_object["some_related_field"]; 

    if (_array.Count > 0) 
     continue; 

.. đây là trong bối cảnh truy vấn từ điện thoại Windows 7 sang dịch vụ WCF bằng JSON dưới dạng định dạng tin nhắn.

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