3

我正在尝试使用 James McCormack's guide to using a custom IComparer with Dynamic Linq。- 见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 [])' 有一些无效参数"

有任何想法吗?我对此很陌生,只是想在我有时间真正经历并正确学习它之前让一些东西发挥作用。

4

1 回答 1

2

仅根据您发布的内容很难判断,OrderBy因为myConverter. 但是,由于GetReflectedPropertyValue返回stringmyConverter必须实现IConverter<String>才能与OrderBy. 如果它没有,并且它实现了类似的东西,IComparer<MyItem>那么编译器真的在寻找一个OrderBy(this IEnumerable<object>, Func<object,string>, IComparer<MyItem>)不存在的方法并吐出那个错误。

如果不清楚,请提供详细信息,myConverter我可以更具体。

如果您使用的是未实现的东西,那么您可以用实现的东西IComparer<T>包装,使其与. 例如:IComparerIComparable<string>Orderby

public class MyStringComparer : IComparer<String>
{
    readonly IComparer comparer = new MyComparer();
    public int Compare(string x, string y)
    {
        return comparer.Compare(x, y);
    }
}
于 2012-09-10T12:47:13.437 回答