Привязка результатов запроса Linq To Entities к datagridview

Я только начал играть с Linq для сущностей в приложении Windows Forms и не понимаю ни одного поведения, которое выглядит таким простым.

Если я наберу код ниже, я получу записи только для чтения в своем dataGridView.

Dim x = From n in Table1 _
        Select n.FirstName, n.LastName, N.Department
DataGridView1.DataSource = x 

Но если я наберу следующий код, я получу редактируемые строки в своем dataGridView

Dim x = From n in Table1 _
        Select n
DataGridView1.DataSource = x

Итак, в основном, если я указываю имена столбцов для выбора и привязки данных к моему DataGridView1, строки доступны только для чтения, но если я не указываю имена столбцов и привязку данных к DataGridView, строки доступны для редактирования, и я не понимаю, почему.


person StackTrace    schedule 17.03.2010    source источник
comment
Ну да, анонимные типы неизменяемы. Что вы ожидаете?   -  person Craig Stuntz    schedule 17.03.2010
comment
Согласно документации, не в VB.NET. (Сейчас я не сижу за компилятором.)   -  person Jesse Millikan    schedule 17.03.2010
comment
В VB.NET они оба: visualstudiomagazine.com/articles/2007/10/01/   -  person Craig Stuntz    schedule 18.03.2010
comment
Ну, да, у меня есть немного больше деталей в моем ответе. :/ Хорошая статья. Я искал, искал и, должно быть, пропустил.   -  person Jesse Millikan    schedule 18.03.2010


Ответы (1)


Об этом есть статья MSDN.

После небольшого поиска и большого редактирования моего ответа кажется, что виновником должен быть анонимные типы. В документации указано, что неключевые поля анонимных типов должны быть доступны для чтения и записи, но вы можете вызвать какое-то исключение из этого правила. Я бы отлаживал и проверял точный тип x в обоих случаях.

В этой записи блога есть еще одна возможная подсказка. «Выражения запроса LINQ будут автоматически использовать ключевые поля в любой ситуации, когда будет генерироваться ключ (например, Group By), [...]». Возможно, поля, созданные с помощью метода Select, автоматически становятся ключевыми свойствами. .

Другой ответ Stackoverflow намекает на это - они соответствовать типу некоторых результатов вызова метода Select, помещая Key в поля другого типа.

Изменить: и эту статью (спасибо, Грег Стунц) выходит прямо и говорит это. Блин. "Вы можете упростить определение анонимного типа при написании запроса LINQ, опуская New With и { }, но имейте в виду, что это создает полностью неизменяемые типы".

person Jesse Millikan    schedule 17.03.2010