Tôi chạy thành công các tuyên bố sau với NorthWind.sdf trong LinqPad:Có phương pháp chung nào để kiểm tra xem một thuộc tính xác định được nhà cung cấp LINQ hỗ trợ hay không, đặc biệt là OData?
from s in Shippers
select new
{
s.ShipperID,
s.CompanyName,
Count=s.ShipViaOrders.Count()
}
Cùng lúc đó, tôi thất bại trong việc điều hành một tuyên bố tương tự với các dịch vụ OData (http://services.odata.org/northwind/northwind.svc) trong LinqPad:
from s in Shippers
select new
{
s.ShipperID,
s.CompanyName,
Count=s.Orders.Count()
}
Lỗi là "Xây dựng hoặc khởi tạo phiên bản của loại <> f__AnonymousType0`3 [System.Int32, System.String, System.Int32] với biểu thức s.Orders.Count() không được hỗ trợ.".
Tôi biết dịch vụ OData rất hạn chế trong Hỗ trợ LINQ. Tôi có hỗ trợ câu lệnh LINQ động trong ứng dụng của tôi. Thực ra tôi đang cố di chuyển nguồn dữ liệu từ Compact SQL Server sang dịch vụ OData.
Vì vậy, tôi phải đối phó với NotSupportedException theo cách tổng quát. Hiện nay, tôi cố gắng để kiểm tra cú pháp của tài sản xác định trước khi chạy nó, chẳng hạn như
"s.Orders.Count() as Count"
Nó trôi qua kiểm tra của tôi, nhưng nó gặp NotSupportedException của OData.
Có cách nào để kiểm tra xem một thuộc tính xác định (bởi một chuỗi hoặc lambda) có được nhà cung cấp LINQ hỗ trợ không?
Mọi đề xuất đều được đánh giá cao.
Ying
@Ying: Điều này nghe như * câu trả lời * cho tôi. Nếu có, bạn có thể muốn chấp nhận nó. – chiccodoro