2012-03-30 2 views
2

Можно ли создать new {variable = x.something} и указать имя переменной динамически? Например:Динамическое новое поле в LINQ

var name = "dynamicName"; 
var result = context.select(x=> new {name.ToString() = x.something }) 

Таким образом, у нас будет список, в котором имя свойства dynamicName. Так это как-то возможно?

+1

вы можете использовать 'NameValueCollection' вместо анонимного типа. http://msdn.microsoft.com/en-us/library/system.collections.specialized.namevaluecollection.aspx – Bazzz

+0

Зачем вам нужно что-то подобное? –

+0

@ Даниэль, например, для динамического создания имен столбцов – kosnkov

ответ

5

Это невозможно с анонимным типом, поскольку анонимные типы не являются динамическими. Они должны быть полностью определены во время компиляции. Тем не менее, вы можете использовать динамический объект как ExpandoObject:

var name = "dynamicName"; 
var result = context.Select(x => 
          { 
           var exp = new ExpandoObject() as IDictionary<string, object>; 
           exp[name] = x.something; 
           return (dynamic)exp; 
          }); 
+0

интересный подход , Мне просто интересно, как вы теперь можете использовать «результат» разумным образом, так как это может быть технически сборником буквально чего угодно. Просто некоторая пища для размышлений .... – Bazzz

+1

«Лямбда-выражение с телом оператора не может быть преобразовано в дерево выражений» – kosnkov

+0

@kosnkov, на самом деле это будет работать с Linq to Objects, но я не думаю, что есть способ сделать что с Entity Framework –

1

Используйте

Dictionary<string,string> myDic 

Тогда

myDic.Add(name.ToString(), x.something) 
+1

+1, но я бы предложил 'Dictionary ' then. По той простой причине, что 'x.something' не обязательно является строкой. – Bazzz

+0

@Bazzz Да, хороший момент. –

1

Вы можете создать анонимный тип во время выполнения с Reflection.Emit, но это не очень просто (http://www.codeproject.com/Articles/13337/Introduction-to-Creating-Dynamic-Types-with-Reflec). Обычно лучше всего для нас диктатор, массив или динамический

Смежные вопросы