Скажем, у меня есть запрос sql
SELECT fname, lname, dob, ssn, address1, address2, zip, phone,state from users
Теперь предположим, что записи находятся либо в словарной базе, либо в строго типизированной коллекции.
У меня есть элемент управления представлением сетки, и я хочу привязать его к своей коллекции, но я хочу отображать только fname, lname, dob и ssn, а не другие столбцы.
Есть ли простой способ извлечь столбцы, а затем привязать их к извлеченному элементу? Не уверен, что LINQ будет здесь полезен.
Это тестовый проект, так как я знакомлюсь с веб-миром с VS-2008.





Возможно, вам помогут LINQ и анонимный класс.
from user in UserCollection
select new { FirstName=user.fname, LastName=user.lname, Dob=user.dob, SSN=user.ssn }
Вы можете использовать linq для возврата анонимного типа (также известного как кортеж). Этот кортеж будет содержать только те свойства, которые вы ищете. Затем вы можете привязать свою сетку к этой коллекции. Google анонимные типы или кортежи на C#, чтобы понять, что я имею в виду.
Предполагая, что ваши данные находятся в некоторой форме IENumerable <T>:
var filteredUser = from U in Users
select new { U.fname, U.lname, U.dob, U.SSN };
FilteredUser теперь представляет собой коллекцию только с этими свойствами.
Это одна из замечательных особенностей LINQ To Objects. Вам не нужно использовать LINQ-To-SQL для получения данных, вы можете использовать все, что хотите, чтобы заполнить свой первоначальный вопрос, а затем использовать Linq-To-Objects, чтобы сократить его в памяти.
Вы можете указать, какие столбцы вы хотите отображать в сетке. Просто укажите нужные столбцы на странице aspx:
<asp:GridView ID = "gvwExample" runat = "server" AutoGenerateColumns = "False" >
<columns>
<asp:BoundField DataField = "firstname" HeaderText = "First Name" />
<asp:BoundField DataField = "lastname" HeaderText = "Last Name" />
<asp:BoundField DataField = "hiredate" HeaderText = "Date Hired" />
</columns>
</asp:GridView>
это я знаю, просто интересно, было ли что-нибудь необычное с VS-2008 и новым фреймворком
Вы можете использовать linq для того, что вам нужно. Если вы создали dbml для своих данных, вы можете просто использовать LINQ для извлечения записей прямо из db (или если ваша коллекция IEnumerable), например:
Dim _records = From user in users _
Select New With {.FirstName = user.fname,_
.Lastname = user.lname,.dob = user.dob,.ssn = user.ssn}
{gridcontrol}.datasource = _records
Джонатан: с filterUser я могу сделать что-то вроде этого foreach (Users usr in filterUser) {user.fname // да, это ничего не делает, кроме как просто посмотреть, могу ли я использовать его таким образом}