这是same question (but with AutoMapper)的对应物。 我使用ValueInjecter并感兴趣,如果有解决方案。
简化代码示例:
// get a list of viewModels for the grid.
// NOTE: sort parameter is flattened property of the model (e.g. "CustomerInvoiceAmount" -> "Customer.Invoice.Amount"
// QUESTION: how do I get original property path so I can pass it to my repository for use with Dynamic LINQ?
public HttpResponseMessage Get(string sort)
{
var models = _repo.GetAll(sort) // get a list of domain models
var dto = _mapper.MapToDto(models); // get a list of view models that are flattened via dto.InjectFrom<FlatLoopValueInjection>(models);
var response = new HttpResponseMessage();
response.CreateContent(vehicles);
return response;
}
答案 0 :(得分:1)
好吧,我能够把一些事情搞砸了但是真的想要社区的一些意见(也许是来自编写ValueInjecter的@Chuck Norris)......
所以要重申这个问题......
因此,如果Company
具有President
类型的Employee
属性,而Employee
具有类型为HomeAddress
的{{1}}属性,则Address
具有名为Address
的字符串属性,然后:
“Line1
”将在视图模型上展平为名为“President.HomeAddress.Line1
”的属性。
为了用户服务器端排序Dynamic Linq需要点状属性路径,而不是扁平化路径。我需要ValueInjecter才能 仅展开平面属性! 不是整个类。
以下是我提出的内容(从执行其他操作的方法中提取的相关逻辑:
PresidentHomeAddressLine1
答案 1 :(得分:0)
另一种方法是使用TrailFinder
IEnumerable<IList<string>> GetTrails(string upn, IEnumerable<PropertyInfo> all, Func<Type, bool> f)
它由UberFlatter
使用,如下所示:
var trails = TrailFinder.GetTrails(flatPropertyName, target.GetType().GetInfos(), f);
f Func检查end属性的类型是否匹配某个条件(可能在你的情况下你可以返回true)