【问题标题】:How to use automapper in orderby clause with dynamic linq?如何在带有动态 linq 的 orderby 子句中使用 automapper?
【发布时间】:2013-03-28 00:37:33
【问题描述】:

我使用 orderProperties 变量作为动态 linq,我需要在 OrderBy 子句中使用 AutoMapper。我需要将“MyColumn”属性从 Resource 类映射到 ResourceViewModel 类的其他属性。 Query() 返回资源的 IQuerable。例如,我在 Resouce 类中具有 MyColumn 属性,我需要将其映射到位于 ResourceViewModel 中的 MyOtherColumn。 任何想法如何做到这一点?

string orderProperties = "MyColumn Ascending";

var orderList = _resourceRepository.Query()
                                   .OrderBy(orderProperties)
                                   .Select(Mapper.Map<Resource, ResourceViewModel>);

【问题讨论】:

  • 您需要发布 Query() 方法返回的任何类型的代码,以及您映射的视图模型。
  • Query() 返回 IQuerable。例如,我在 Resouce 类中有 MyColumn 属性,我需要将其映射到 MyOtherColumn,它位于 ResourceViewModel 中。

标签: c# linq dynamic sql-order-by automapper


【解决方案1】:

我会尝试另一种方法:

  • 将我的查询结果存储在一个变量中
  • 然后使用自动映射器翻译该结果集。

排序应该完全独立于 automapper。 Autommapper 只“翻译”这些东西。

类似这样的:

string orderProperties = "MyColumn Ascending";

var orderList = _resourceRepository.Query()
                                   .OrderBy(orderProperties)
                                   .ToList();
Mapper.CreateMap<IList<Resource>, IList<ResourceViewModel>>();
var results = Mapper.Map<IList<Resource>>(orderList);

HTH

【讨论】:

  • +1 - 仅供参考,Mapper.CreateMap 只需调用一次 - 您无需在每次要将对象映射到另一个对象时调用它。我通常在存储库的静态构造函数中这样做。
  • 是的,完全正确。我通常会放入一个配置类/项目,通常是 DI 容器配置所在的位置,以便执行 Mapper.AssertConfigurationIsValid();尽早。我很难学会这一点;(
猜你喜欢
  • 2016-03-18
  • 2017-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多