WCF Data Services gives you access to a DataServiceContext instance. If you have generated your references this will be typed for you. However, the query operators available to you are limited and I expect you will experience various degrees of friction trying to use it compared to just using Entity Framework and Linq to Entities.
I expect this because although I am using a slightly different data model to yours, it is a similar hierarchical model and I started the query lower down as you did:
var query = context.DataSources.
Where(x => x.ReportLayouts[0].ReportLayoutID == 1045 && x.InstanceName == "hello").
Select(li => new { InstanceName = li.InstanceName });
The result on a ToList()
An unhandled exception of type 'System.NotSupportedException' occurred
in Microsoft.Data.Services.Client.dll
Additional information: The expression
(([10007].ReportLayouts.get_Item(0).ReportLayoutID == 1045) And
([10007].InstanceName == "hello")) is not supported.
In order to get that data I then tried this as a test:
var query2 = context.DataSources.Select(x => x.ReportLayouts[0].ReportLayoutID == 1045);
var result2 = query2.ToList();
'System.NotSupportedException' Additional information: The method
'Select' is not supported.
I then started with my top level entity, equivalent to your Person and ran this:
var query3 = context.Reports.Where(x =>x.ReportLayoutID == 34 && x.DatabaseInstance.ServerName == "hello");
var result3 = query3.ToList();
This works fine. I am now struggling to get from this top level entity to the lower level entity via navigation properties. Using the DataServiceContext class directly I can more easily compose a DataServiceQuery that translates directly to the URL formats supported by ODATA with AddQueryOption:
query = query.AddQueryOption("$expand", expandPropertyName);
This allows you to load navigation properties explicitly by generating a url similar to this:
ReportService.svc/DataSources?expand=dataobjects
The generated service reference also provides access to the DataServiceContext.LoadProperty method. Once loaded you can query it but this involves round trips.
Personally I would not use WCF Data Services as your DAL as this is what Entity Framework is built for. If you need to use a service to expose an EF model to external clients that is a different matter, but your DAL should still be Entity Framework. WCF Data Services would be appropriate for an application doing very simple CRUD (no business logic). I would not trust it for complex queries run internally as a DAL. The web methods it supports are also very crude only accepting primitives such as string and int as parameters. I would investigate WCF if a service is required, which I suspect it is not in your case as you mentioned using it as a DAL.