Auf die Antwort auf meine Frage reagieren Wählen Sie eine Modelleigenschaft mit einem Lambda und nicht mit einer Frage zum Namen der Zeichenfolgeeigenschaft aus , um einer Sammlung Eigenschaften wie folgt hinzuzufügen:
var props = new ExportPropertyInfoCollection<JobCard>();
props.Include(model => model.BusinessInstallNumber).Title("Install No").Width(64).KeepZeroPadding(true);
props.Include(model => model.DeviceName).Title("Device").Width(70);
props.Include(model => model.DateRequested).Title("Request Date").Format("{0:dd/MM/yyyy}").Width(83);
Ich habe den folgenden Code in die Include
Methode geschrieben:
public class PropertyCollection<T>
{
public void Include(Expression<Func<T, object>> expression)
{
var memberExpression = expression.Body as MemberExpression;
if (memberExpression != null)
{
var pes = new ExportPropertyInfoBuilder {Property = new ExportPropertyInfo {Property = memberExpression.Member as PropertyInfo}};
Properties.Add(pes.Property.Property.Name, pes.Property);
return pes;
}
Um jedoch den Code auf ausgeführt wird , fand ich das lambda einig ergab Member Werte wie erwartet, aber andere ergaben UnaryExpression Werte. Ich musste die erste Codezeile wie folgt ändern, bevor ich alle meine Eigenschaften mit Lambdas hinzufügen konnte:
var memberExpression = expression.Body as MemberExpression ?? ((UnaryExpression) expression.Body).Operand as MemberExpression;
Alle Eigenschaften sind 'einfache' Typen, dh Zeichenfolge, DateTime, int, bool usw. in einem POCO-Geschäftsobjekt. Sie sind mit verschiedenen DataAnnotations- Attributen versehen.
Was bewirkt, dass einige der Lambdas in meinem Beispiel MemberExpression- Werte und andere UnaryExpression- Werte liefern? In meinem Beispiel befindet sich die erste UnaryExpression in der dritten Zeile, der DateTime- Eigenschaft, aber boolesche Eigenschaften führen auch zu UnaryExpressions .