Ersetzen Sie den Parametertyp im Lambda -Ausdruck
Posted: 09 Mar 2025, 12:52
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>
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>
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.>
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();
}
}
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);
}
}
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.>