Замените тип параметра в выражение лямбдыC#

Место общения программистов C#
Anonymous
Замените тип параметра в выражение лямбды

Сообщение Anonymous »

Я пытаюсь заменить тип параметра в выражении Lambda от одного типа на другой. < /p>

Я нашел другие ответы на Stackoverflow, то есть этот, но мне не повезло с ними. /> Однако репозиторий должен иметь дело с собственными объектами передачи данных, а затем отображать и возвращать объекты домена: < /p>

colourdto.cs
< /p>

Код: Выделить всё

public class DtoColour {

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

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

domaincolour.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();
}
}
< /code>

Как вы можете видеть, это не будет работать, так как предикат предназначен для модели домена, а коллекция внутри репозитория представляет собой сбор объектов передачи данных. Пример: < /p>

Сценарий тестирования
< /p>

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.

edit: вот dottetfiddle < /strong> < /p>

все еще не работает.>

Подробнее здесь: https://stackoverflow.com/questions/383 ... expression

Вернуться в «C#»