Как уже отмечал svick, вы не можете запрашивать у сервера типы, которые он не понимает (по крайней мере, не используя OData, который есть).Но вы все равно можете запрашивать только те свойства, которые вам нужны, и ничего более.
Поскольку у меня нет вашего сервиса, в следующем примере используется демонстрационный сервис на odata.org:
DemoService ctx = new DemoService(new Uri("http://services.odata.org/OData/OData.svc/"));
var q =
ctx.Products
.Where(p => p.ID == 1)
.Select(p =>
new Product
{
Category = new Category
{
Name = p.Category.Name
}
});
var r =
q.AsEnumerable()
.Select(p =>
new
{
CategoryName = p.Category.Name
});
Первый запрос «q» будет полностью выполняться на сервере (за исключением создания объектов на стороне клиента), и он получит только имя категории (и метаданные обо всех рассматриваемых объектах).Он будет преобразован в URL, например /Products(1)?$expand=Category&$select=Category/Name.
Второй запрос начинается с AsEnumerable, который эффективно выполняет первый запрос, а затем просто выполняет простойпревратить в анонимный тип.Это делается полностью на клиенте (без взаимодействия с сервером).