Ersetzen Sie den Parametertyp im Lambda -AusdruckC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Ersetzen Sie den Parametertyp im Lambda -Ausdruck

Post by Anonymous »

Ich versuche, den Parametertyp in einem Lambda -Ausdruck von einem Typ zum anderen zu ersetzen. /> Das Repository muss sich jedoch mit eigenen Datenübertragungsobjekten befassen und Domänenobjekte kartieren und zurückgeben: < /p>

colourdto.cs
< /p>

Code: Select all

public class DtoColour {

public DtoColour(string name)
{
Name = name;
}

public string Name { get; set; }
}
< /code>

 dowainColour.cs
< /p>

public class DomainColour {

public DomainColour(string name)
{
Name = name;
}

public string Name { get; set; }
}
< /code>

Repository.cs
< /p>

public class ColourRepository {
...
public IEnumerable GetWhere(Expression predicate)
{
// Context.Colours is of type ColourDto
return Context.Colours.Where(predicate).Map().ToList();
}
}
Wie Sie sehen können, funktioniert dies nicht, da das Prädikat für das Domänenmodell und die Sammlung im Repository eine Sammlung von Datenübertragungsobjekten ist. />
Testszenario
< /p>

Code: Select all

public class ColourRepository {
...
public IEnumerable GetWhere(Expression predicate)
{
var visitor = new MyExpressionVisitor();
var newPredicate = visitor.Visit(predicate) as Expression;
return Context.Colours.Where(newPredicate.Complie()).Map().ToList();
}
}

public class MyExpressionVisitor : ExpressionVisitor
{
protected override Expression VisitParameter(ParameterExpression node)
{
return Expression.Parameter(typeof(ColourDto), node.Name);
}
}
finally here is the exception:


System.ArgumentException : Property 'System.String Name' is not
defined for type 'ColourDto'


Hope someone can help.

Bearbeiten: Hier ist eine Dotnetfiddle < /strong> < /p>

funktioniert immer noch nicht.>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post