2012-03-06 2 views
1

У меня есть следующие модели:наследования и Linq к Entities

public class Person 
{ 
    long Id; 
    string name; 
} 

public class Student : Person 
{ 
    string studentId; 
} 

public class Bus 
{ 
    long Id; 

    public ICollection<Person> riders {set; get;} 
} 

public class SchoolBus : Bus 
{ 
    long schoolBusNumber; 
} 

У меня также есть следующий код:

SchoolBus schoolBus = new SchoolBus(); 

schoolBus.riders = new List<Person> 
{ 
    new Student { name = "Jim" }, 
    new Student { name = "Jane } 
} 


var query = from rider in SchoolBus.riders 
    select new 
    { 
     (rider as Student).studentId; 
    } 

Студенты и лица устанавливаются как отдельные столы и я используя DbContext.

Я знаю, почему это не сработает, но какие из возможных решений для меня могут вернуть это право студенту с помощью коллекции Person?

+0

Оказалось, что Lazy-Loading меня достал. Необходимо использовать Include(), чтобы включить свойство, которое мне нужно загрузить при выборе. – khaihon

ответ

0

попробовать это:

var studentIds = rider.OfType<Student>().Select(x => x.studentId); 
+0

OfType поддерживается в Linq для Entities: http://msdn.microsoft.com/en-us/library/bb738551.aspx – avs099

+0

хорошая ссылка, спасибо –

0

Если ваш код в точности то, что вы показали, что это будет работать:

Schoolbus Schoolbus = новый Schoolbus();

schoolBus.riders = new List<Person> 
{ 
    new Student { name = "Jim" }, 
    new Student { name = "Jane } 
} 
var query = from rider in SchoolBus.riders 
select new 
{ 
    riderID = (rider as Student).studentId; 
} 

Но если ваш запрос выполняется на linq2entity, вы должны показать свой точный код и свою проблему.

Смежные вопросы