3

Dynamic Linq でカスタム IComparer を使用するための James McCormack のガイドを利用しようとしています。- http://zootfroot.blogspot.co.uk/2009/10/dynamic-linq-orderby.html?showComment=1347276236930#c11348033278810583を参照

クエリを使用して、文字列値の Enumerable を取得します。

.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返すのでstring、と一緒に使用するにmyConverterは実装する必要があります。そうでなく、次のようなものを実装している場合、コンパイラは実際には存在しないメソッドを探しており、そのエラーを吐き出しています。IConverter<String>OrderByIComparer<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 に答える