2010-10-08 16 views
8

Tôi đang cố gắng làm cho một số mã hoạt động bằng OData. Đoạn mã sau dường như không hoạt động.Sự cố với bộ lọc OData và trường Hướng dẫn

ds là OpenDataServiceProxy.

adapterTypeId là biểu diễn chuỗi của Hướng dẫn.

adapterName là một tên chuỗi

ds.query('/DataAdapters?$filter=DataAdapterType.DataAdapterTypeId eq guid(\'' + adapterTypeId + '\') and Name eq \'' + adapterName + '\'', ifmgr_CreateAdapter_Step1, onGenericFailure, 'Error'); 

Dòng trên cung cấp cho các lỗi sau:

Biểu hiện của loại 'System.Boolean' dự kiến ​​sẽ ở vị trí 0.

Nếu tôi loại bỏ phần Guid của bộ lọc để nó chỉ sử dụng phần “Tên” nó hoạt động tốt.

Trường bảng DataAdapters “DataAdapterTypeId” là khóa ngoài được gán cho trường “DataAdapterTypes” trường DataAdapterTypeId.

Có ai có thể phát hiện ra những gì tôi đang làm sai?

------------------- EDIT ----------------------

OK, tôi đã thay đổi bộ lọc như hình dưới đây. Tôi không còn gặp lỗi nữa nhưng nhận được nhiều kết quả hơn là một bản ghi khớp với bộ lọc. Bất cứ ai có thể nói lý do tại sao nó không lọc?

ds.query('/DataAdapters?($filter=Name eq \'' + adapterName + '\' and $filter=DataAdapterTypeId eq guid\'' + adapterTypeId + '\')', ifmgr_CreateAdapter_Step1, onGenericFailure, ''); 

Trả lời

14

Giá trị guid cần được formated như guid '' - thấy điều này để biết chi tiết: http://www.odata.org/developers/protocols/overview#AbstractTypeSystem Không biết những gì bạn muốn đạt được với các DataAdapterType.DataAdatperTypeId, nhưng dot nhân vật không có ý nghĩa đặc biệt trong biểu thức lọc, vì vậy nó có thể không làm những gì bạn muốn. Nếu DataAdapters thực thể thiết lập của bạn có thực thể của kiểu DataAdapterType, mà sau đó có một DataAdapterTypeId tài sản đó là của kiểu GUID, sau đó bạn có thể lọc vào nó bằng cách đơn giản

DataAdapterTypeId eq guid'<value>' 
+0

Tôi đã thực hiện các thay đổi bạn đã đề xuất nhưng bây giờ tôi nhận được tất cả các bản ghi lại, không chỉ là bản ghi khớp với bộ lọc. Tôi đã thêm chi tiết vào câu hỏi ban đầu của mình. – Retrocoder

+0

Không đặt parethesis xung quanh các bộ lọc $. –

+0

Nếu hàng năm muốn hai điều kiện sử dụng một cái gì đó như: $ filter = Tên eq 'foo' và Mô tả eq 'bar' –

1

Bạn có thể tìm thấy những tài liệu tham khảo ước được cập nhật URL here.

1

Với OData v4 gì làm việc cho tôi trên ASP.NET là

'DataAdapterTypeId eq ' + adapterTypeId

Quan sát không có dấu ngoặc kép hoặc phôi xung quanh giá trị guid. Nó sẽ ném một lỗi nếu adapterTypeId không phải là GUID.