Если я вас правильно понимаю, вы хотели бы получить коллекцию объектов, которые вам не нужно определять в коде, но которые можно использовать строго типизированным способом. К сожалению, нет, вы не можете.
анонимный тип выглядит как некий вариант или динамический объект , но на самом деле это строго типизированный класс, определенный во время компиляции. .NET автоматически определяет тип для вас. Для того чтобы .net мог это сделать, он должен иметь некоторую подсказку из кода, с помощью которой можно вывести определение типа. Это должно иметь что-то вроде:
from ItemA in ItemData.AsEnumerable()
select ItemA.Item("Name"), ItemA.Item("Email")
так что он знает, какие члены определить. Нет способа обойти это, информация должна быть логически для определения анонимного типа.
В зависимости от того, почему именно вы пытаетесь это сделать, есть несколько вариантов.
- Если вы хотите использовать intellisense при инкапсуляции доступа к данным, вы можете вернуть xml вместо данных из вашего класса инкапсулированного доступа к данным. (Вы можете очень легко преобразовать таблицы данных в xml. Вы захотите использовать новые классы System.Xml.Linq , такие как XElement . Они великолепны!) Тогда вы можете использовать способность VS2008 для создания схемы xsd из xml. Затем используйте / импортируйте эту схему в верхней части вашей кодовой страницы, и вы получите intellisense.
- Если вам нужен объект со свойствами для ваших данных, но вы не хотите определять класс / структуру для них, вам понравятся новые динамические объекты в C # 4.0 / VB10. У вас есть свойства объекта, основанные на том, что возвращает sql, но у вас не будет intellisense. Это также связано с затратами на производительность, но (а) это может не иметь значения для вашей ситуации и (б) в некоторых ситуациях это не так уж и плохо.
- Если вы просто пытаетесь избежать создания множества классов, подумайте об определении структур / структур в одном и том же файле кода под определением вашего класса. Когда вы добавляете больше столбцов в набор результатов, легко настроить структуру с помощью более открытых полей.
Короче говоря, вы можете иметь любые два из следующих трех: (а) динамические, (б) объекты с типизированной лицевой частью, (3) интеллектуальный смысл. Но не все три.