У вас уже есть экземпляр IEnumerable<Student>
, и вы не можете проецировать объекты из запроса по причинам, описанным здесь )
Вам также не нужно создавать список для привязки к этому источнику данных - вы можете значительно упростить свой метод, изменив его следующим образом:
public static IEnumerable<Student> GetStudents()
{
return new DojoDBDataContext().Students;
}
Нет причины проектировать новый экземпляр, чтобы отобразить только несколько свойств, выполнив запрос, вы все равно возвращаете все значения, и ваша проекция ничего вам не спасет. Если вы действительно хотите вернуть только несколько значений из этого запроса в целях сокрытия информации, вы можете сделать это:
public static IEnumerable<Object> GetStudents()
{
DojoDBDataContext conn = new DojoDBDataContext();
return conn.Students
.Select(s => new {
ID = s.ID,
FirstName = s.FirstName,
LastName = s.LastName,
Belt = s.Belt
});
}
Редактировать: Если вы не используете C # 4, вам придется явным образом преобразовать содержимое IEnumerable<T>
в Object
. Только C # 4 поддерживает ковариацию для IEnumerable<T>
. Поэтому, если вы используете C # 3, вам придется сделать следующее:
public static IEnumerable<Object> GetStudents()
{
DojoDBDataContext conn = new DojoDBDataContext();
return conn.Students
.Select(s => new {
ID = s.ID,
FirstName = s.FirstName,
LastName = s.LastName,
Belt = s.Belt
}).Cast<Object>();
}