2016-06-15 4 views
0

У меня есть этот запрос LINQ, где «новый» предложение создает анонимный тип:Создать выражение LINQ для SELECT, предложения

var query = from x in List 
      select new {x.Field1, x.Field2}; 

Как построить динамически на выражение LINQ для:

select new {x.Field1, x.Field2}; 

MORE КОНТЕКСТ:

Мы имеем Li ул < клиентов > где Клиент свойства A, B, C, D, E, F, G.

Нам нужно возвращать только некоторые свойства иногда:

Первый вызов возвращает:

select new {x.A, x.B} 

Второй вызов возвращает:

select new {x.C, x.D} 

возвращение динамична! У меня есть имена свойств в массиве строк.

Спасибо!

+0

Можете ли вы уточнить? Вопрос не очень ясен. –

+0

Почему вы отмечаете EF, вы используете его в этом случае? – octavioccl

+0

Привет @YacoubMassad, мне нужно создать выражение LINQ, поэтому я могу вызвать метод «Выбрать», например «Выбрать (linqExpression)» – JaimeCamargo

ответ

0

Предполагая CSV для свойств, которые вы хотите получить. Вы должны иметь возможность использовать это.

public static class ObjectExtensions 
{ 
    public static Dictionary<string,object> GetProperties(this object obj, string properties) 
    { 
     var propertyNames = properties.Split(','); 
     var result = new Dictionary<string, object>(); 
     var type = obj.GetType(); 
     foreach (var property in propertyNames) 
     { 
      var prop = type.GetProperty(property); 
      var value = prop.GetValue(obj); 
      result.Add(property, value); 
     } 
     return result; 
    } 
} 

Он хранит пару ключей значение в словаре

Использование будет.

var result = list.Select(p => p.GetProperties("Field1,Field2")); 
JsonSerializer.CreateDefault().Serialize(Console.Out, result); 
Смежные вопросы