2012-03-06 138 views
1

我有以下型号:继承和LINQ到实体

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集合返回正确的studentId?

+0

结果懒惰加载让我。需要使用Include()来包含我需要加载的属性。 – khaihon 2012-03-08 22:57:23

回答

0

试试这个:

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

OfType在Linq to Entities中受支持:http://msdn.microsoft.com/en-us/library/bb738551.aspx – avs099 2012-03-06 21:58:13

+0

很好的参考,谢谢 – 2012-03-06 23:51:00

0

如果你的代码是你显示什么,这将工作:

学童校车=新校车();

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上,你应该显示你的确切代码和你的问题。