我正在尝试使用James McCormack的指南来使用Dynamic Linq定制IComparer。 - 见http://zootfroot.blogspot.co.uk/2009/10/dynamic-linq-orderby.html?showComment=1347276236930#c11348033278810583
我使用查询来拉回一个可枚举的字符串值:
.Select("fieldname").Distinct()
然后尝试使用
.OrderBy(item=>item.GetReflectedPropertyValue("fieldname"),new myComparer())
GetReflectedPropertyValue是James定义的辅助方法
public static string GetReflectedPropertyValue(this object subject, string field)
{
object reflectedValue = subject.GetType().GetProperty(field).GetValue(subject, null);
return reflectedValue != null ? reflectedValue.ToString() : "";
}
但得到错误“'System.Collections.Generic.IEnumerable'不包含'OrderBy'的定义和最佳扩展方法重载'System.Linq.Dynamic.DynamicQueryable.OrderBy(System.Linq.IQueryable,string ,params object [])'有一些无效的参数“
有什么想法吗?我是新手,只是在我有时间实际完成并正确学习之前尝试一些工作。
答案 0 :(得分:2)
根据您发布的内容很难判断,因为OrderBy
的解析将取决于myConverter
的实施。但是,由于GetReflectedPropertyValue
返回string
,myConverter
必须实施IConverter<String>
才能与OrderBy
一起使用。如果没有,并且它实现类似IComparer<MyItem>
之类的东西,那么编译器实际上正在寻找一个不存在的方法OrderBy(this IEnumerable<object>, Func<object,string>, IComparer<MyItem>)
并吐出该错误。
如果不清楚,请提供myConverter
的详细信息,我可以更具体。
如果您使用的是未实现IComparer<T>
的内容,那么您可以将IComparer
包含一些实现IComparable<string>
的内容,以便与Orderby
兼容。例如:
public class MyStringComparer : IComparer<String>
{
readonly IComparer comparer = new MyComparer();
public int Compare(string x, string y)
{
return comparer.Compare(x, y);
}
}