Suppose we have 2 types, mapped to a Database via EF 4.
Schedule 1.....1 Visit
Also, we have third custom view type
public
Finally, developed some ugly workaround - introduced new member in custom type and explicitly queried for it.
public class ScheduleView
{
public Schedule Schedule { get; set; }
public Visit Visit { get; set; }
**public Patient Patient{ get; set; }**
}
var query = Context.Schedule.Join(Context.Visit
,/*Schedule join key definition*/,/*Visit join key definition*/,
(scheduleView, visit) => new ScheduleView
{Schedule = scheduleView, Visit = visit, **Patient = visit.Patient**})
Now I have Patient
loading properly in my custom type. Amusing, but when I investigate ScheduleView.Visiting.Patient
after introducing ScheduleView.Patient
I found it also loaded.
Cant get the EF logic in this case. And dunno how to force loading ScheduleView.Visiting.Patient
without having to load useless ScheduleView.Patient
:(
The error is spot on. Your trying to create an ObjectQuery (LINQ-Entities IQueryable), with a type (ScheduleView) which does not exist in your Model.
You can project into this type, sure - but not affect the query with it.
Will something like this work? (off the top of my head, untested)
var scheduleViews = (from s in ctx.Schedules
join v in ctx.Visits.Include("Patient")
on v.ScheduleId equals s.ScheduleId
select new ScheduleView
{
Schedule = s,
Visit = v
}).ToList();
Your main problem is ObjectQuery<ScheduleView>
is not translatable to a store expression. So do your include on the Visits
entity set, not the IQueryable.
HTH