Привязка результатов запроса Linq к объектам к сетке данных - PullRequest
1 голос
/ 17 марта 2010

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

Если я наберу код ниже, я получу записи ReadOnly в моем 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, строки можно редактировать, и я не понимаю, почему .

1 Ответ

1 голос
/ 17 марта 2010

Существует статья MSDN об этом.

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...