Ich werde sagen, dass die dynamic-linq
nicht „stark genug“, um diese Dinge zu tun. Es sucht nach Methoden nur in den angegebenen Objekten und einigen speziellen Klassen: Math
, Convert
, die verschiedenen Basistypen (int
, float
, string
, ...), Guid
, Timespan
, DateTime
Die Liste dieser Arten ist deutlich sichtbar, wenn Sie ilspy/reflector für die Datei verwenden. Sie sind in System.Linq.Dynamic.ExpressionParser.predefinedTypes
.
Nun, klar könnte ich falsch sein, aber dies funktioniert: .Select("Guid.NewGuid().ToString()").Cast<string>().ToArray()
zeigt, dass es sehr wahrscheinlich ist, dass die „richtige“ -Liste ist.
Es gibt einen Artikel hier, wie dynamische LINQ zu ändern, wenn Sie http://www.krizzcode.com/2012/01/extending-dynamiclinq-language.html
Jetzt interessiert sind, ein intelligenter Mann die Quelle dynamischer Linq nehmen würde und einfach das Array erweitern ... Aber hier gibt es nicht intelligente Männer ...Es gibt nur Programmierer, die Blut wollen! Blut aber vor allem Innereien!
var type = typeof(DynamicQueryable).Assembly.GetType("System.Linq.Dynamic.ExpressionParser");
FieldInfo field = type.GetField("predefinedTypes", BindingFlags.Static | BindingFlags.NonPublic);
Type[] predefinedTypes = (Type[])field.GetValue(null);
Array.Resize(ref predefinedTypes, predefinedTypes.Length + 1);
predefinedTypes[predefinedTypes.Length - 1] = typeof(A); // Your type
field.SetValue(null, predefinedTypes);
dies tun (mit den Typen, die Sie wünschen) vor dem ersten Aufruf zu Dynamische Linq (denn nach der ersten die Methoden/Eigenschaften dieser Typen nennen werden zwischengespeichert)
Erläuterung: wir Reflexion verwenden hinzufügen unser Objekt (e) zu dieser "speziellen Liste".
Welche Syntax verwenden Sie, wenn Sie eine Zeichenfolge in der 'Enumerable.Select' Methode verwenden? –
@Bob. In den Tags geschrieben: dynamic-linq – xanatos