Да, вы можете выбрать анонимный тип, но вы не можете оба выбрать анонимный тип, а затем использовать эти объекты, как если бы они реализовали интерфейс.Причина в том, что анонимный тип не реализует интерфейс, даже если они имеют одинаковые свойства как по типу, так и по имени.Нет способа определить, что анонимный тип реализует интерфейс.Если вы хотите использовать объекты через их реализации интерфейса, вы должны выбрать конкретный тип, который реализует этот интерфейс.
Анонимные типы - это типы классов, которые являются производными непосредственно от объекта и которые нельзя преобразовать влюбой тип кроме объекта.Компилятор предоставляет имя для каждого анонимного типа, хотя ваше приложение не может получить к нему доступ.С точки зрения общеязыковой среды выполнения анонимный тип ничем не отличается от любого другого ссылочного типа.
Ссылка: http://msdn.microsoft.com/en-us/library/bb397696.aspx
Я, безусловно, могу сочувствовать вашему намерению здесь.Было бы хорошо, если бы компилятор мог интуитивно понять, что тип соответствует определению интерфейса, когда тип является анонимным, но это действительно применимо только тогда, когда интерфейс состоит исключительно из свойств, доступных только для чтения.В тот момент, когда ваш интерфейс определяет свойства с помощью сеттеров или методов, анонимный тип не может реализовать его.С другой стороны, если вы используете анонимный тип так, как он предназначен - в качестве кратковременного временного типа для определенного использования - вы можете просто ссылаться на его свойства, и вам вообще не нужен интерфейс.
var query = from n in names.AsQueryable()
select new {A = n.ToUpper(), B = 2012};
foreach (var item in query)
{
Console.WriteLine( item.A );
}