Linq orderby StringComparer动态

时间:2018-05-04 13:45:39

标签: c# linq

从我之前的问题开始。 C# Linq OrderBy(x => x.property)

我动态地指定了我的linq orderby参数。

if

问题是当我想通过StringComparison.OrdinalIgnoreCase订购时:

var param = “attribute1”;    
var propertyInfo = typeof(data).GetProperty(param);    
List<data> newList = _list
  .OrderBy(x => propertyInfo.GetValue(x, null))
  .ToList();

我收到此错误:

  

方法的类型参数   &#39; System.Linq.Enumerable.OrderBy(System.Collections.Generic.IEnumerable,   System.Func,   System.Collections.Generic.IComparer)&#39;无法推断   用法。尝试明确指定类型参数。

不要让它成为动态的作品。但我希望这能订购动态论证。

List<data> newList = _list
  .OrderBy(x => propertyInfo.GetValue(x, null), StringComparer.OrdinalIgnoreCase)
  .ToList();

3 个答案:

答案 0 :(得分:3)

由于propertyInfo.GetValue返回Object(而不是String),您会遇到语法错误。尝试转换为String

List<data> newList = _list
  .OrderBy(x => propertyInfo.GetValue(x, null) as String,
           StringComparer.OrdinalIgnoreCase)
  .ToList();

答案 1 :(得分:0)

ToString()

的结果致电GetValue()
List<data> newList = _list
  .OrderBy(x => propertyInfo.GetValue(x, null).ToString(), StringComparer.OrdinalIgnoreCase)
  .ToList();

答案 2 :(得分:0)

由于GetValue方法将对象作为返回类型。所以我们需要将它强制转换为String并解决你的问题。

  newList.OrderBy(x => (string)propertyInfo.GetValue(x, null), StringComparer.OrdinalIgnoreCase).ToList();

尝试一下。希望它能奏效。