//От моей формы
BindingSource bs = new BindingSource();
private void fillStudentGrid()
{
bs.DataSource = Admin.GetStudents();
dgViewStudents.DataSource = bs;
}
//От Администраторского класса
public static List<Student> GetStudents()
{
DojoDBDataContext conn = new DojoDBDataContext();
var query =
(from s in conn.Students
select new Student
{
ID = s.ID,
FirstName = s.FirstName,
LastName = s.LastName,
Belt = s.Belt
}).ToList();
return query;
}
Я пытаюсь заполнить управление datagridview в Winforms, и я только хочу несколько значений. Компиляции кода, но броски ошибка периода выполнения:
Явная конструкция объекта вводит 'DojoManagement. Студенту' в запросе не разрешают.
Существует ли способ получить его работающий этим способом?
У вас уже есть экземпляр IEnumerable
, и вы не можете проецировать объекты из запроса по причинам, описанным здесь )
Вам также не нужно создавать список для привязки к этому источнику данных - вы можете значительно упростить свой метод, изменив его на это:
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
в Объект
явно. Только C # 4 поддерживает ковариацию для IEnumerable
. Итак, если вы используете 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>();
}
Просто верните список объектов анонимного типа:
public static List<object> GetStudents()
{
DojoDBDataContext conn = new DojoDBDataContext();
var query =
(from s in conn.Students
select new
{
ID = s.ID,
FirstName = s.FirstName,
LastName = s.LastName,
Belt = s.Belt
}).Cast<object>().ToList();
return query;
}