从我之前的问题开始。 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();
答案 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();
尝试一下。希望它能奏效。