Ersetzen Sie den Parametertyp im Lambda -Ausdruck

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Ersetzen Sie den Parametertyp im Lambda -Ausdruck

by Anonymous » 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>

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.>

Top