gpt4 book ai didi

c# - 如何使用 ValueInjecter 根据扁平化属性的名称查找源属性

转载 作者:行者123 更新时间:2023-11-30 17:59:41 25 4
gpt4 key购买 nike

这是 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;
}

最佳答案

好吧,我能够拼凑出一些东西,但真的很想得到社区的一些意见(也许来自 @Chuck Norris,他编写了 ValueInjecter)......

所以重申这个问题......

  • 您有在您的 View 中使用的平面化 View 模型。
  • View 有一个网格,其列是所述 View 模型的属性。
  • 当用户点击该列时,一个 sort=columnName 被传递给 Controller ​​
  • 因此,现在您需要将扁平化的属性名称解码为原始对象图,以便将其传递到您的存储库以进行服务器端排序(例如,使用 Dynamic Expression API、Dynamic LINQ 等)...

因此,如果 Company 有一个名为 President 的属性,类型为 Employee,而 Employee 有一个名为 的属性>HomeAddress 类型为 Address,并且 Address 具有名为 Line1 的字符串属性,然后:

President.HomeAddress.Line1”将在您的 View 模型中展平为名为“PresidentHomeAddressLine1”的属性。

为了用户服务器端排序 Dynamic Linq 需要点属性路径,而不是扁平路径。我需要 ValueInjecter 来只展开平面属性!不是整个类(class)。

这是我想出的(从做其他事情的方法中提取的相关逻辑:

// type is type of your unflattened domain model.
// flatProperty is property name in your flattened view model
public string GetSortExpressionFor(Type type, string flatPropertyPath)
{
if (type == null || String.IsNullOrWhiteSpace(flatPropertyPath))
{
return String.Empty;
}

// use ValueInjecter to find unflattened property
var trails = TrailFinder.GetTrails(flatPropertyPath, type.GetInfos(), typesMatch => true).FirstOrDefault();
var unflatPropertyPath = (trails != null && trails.Any()) ? String.Join(".", trails) : String.Empty;

return unflatPropertyPath;
}



// sample usage
var unflatPropertyPath = GetSortExpressionFor(typeof(Company), "PresidentHomeAddressLine1");
// unflatPropertyPath == "President.HomeAddress.Line1"

关于c# - 如何使用 ValueInjecter 根据扁平化属性的名称查找源属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10935016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com