2016-06-15 19 views
0

ich diese LINQ-Abfrage, wo die "neuen" Satz einen anonymen Typ erzeugt:Erstellen einer LINQ-Ausdruck für SELECT Satz

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

Wie dynamisch die LINQ Expression bauen:

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

mehr Kontext:

Wir haben einen Li st <Kunden> in denen der Kunde hat Eigenschaften A, B, C, D, E, F, G.

Wir brauchen manchmal nur einige Eigenschaften zurück:

Erster Aufruf kehrt:

select new {x.A, x.B} 

Zweiter Aufruf zurückkehrt:

select new {x.C, x.D} 

Die Rückkehr ist dynamisch! Ich habe die Namen der Eigenschaften in String-Array.

Danke!

+0

Können Sie es ausarbeiten? Die Frage ist nicht sehr klar. –

+0

Warum markieren Sie EF, verwenden Sie es in diesem Fall? – octavioccl

+0

Hi @YacoubMassad, ich muss den LINQ-Ausdruck erstellen, damit ich die "Select" -Methode wie "Select (linqExpression)" aufrufen kann – JaimeCamargo

Antwort

0

Annahme einer CSV für die Eigenschaften, die Sie abrufen möchten. Sie sollten in der Lage sein, dies zu verwenden.

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; 
    } 
} 

Es speichert das Schlüsselwertpaar in einem Wörterbuch

Die Nutzung wäre.

var result = list.Select(p => p.GetProperties("Field1,Field2")); 
JsonSerializer.CreateDefault().Serialize(Console.Out, result); 
Verwandte Themen