首页 > 解决方案 > Linq orderby StringComparer 动态

问题描述

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

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

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

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

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

我收到此错误:

无法从用法中推断方法“System.Linq.Enumerable.OrderBy(System.Collections.Generic.IEnumerable, System.Func, System.Collections.Generic.IComparer)”的类型参数。尝试明确指定类型参数。

通过不使其成为动态作品。但我希望这个命令动态参数。

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

标签: c#linq

解决方案


由于propertyInfo.GetValue返回Object(not String) 你有一个语法错误。尝试投射到String

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

推荐阅读