2

これはおそらく比較的単純な見落としですが、実際にこれを行うことが許可されているかどうか、または合理的な代替手段 (VS2010、C# .Net 4.0 を使用) があるかどうかはわかりません。可能であれば、コンストラクターでこれを行うことを強くお勧めします。

これは私のクラスです:

public class MyClass1<TOrderBy> : MyInterface1<MyType1, MyType2>
{
    public MyClass1(IEnumerable<Guid> ids) : this(ids, 0, 10, a => a.Time, ListSortDirection.Ascending) { }

    public MyClass1(IEnumerable<Guid> ids, int pageIndex, int itemsPerPage, Expression<Func<MyType2, TOrderBy>> orderBy, ListSortDirection sortDirection)
        {
            this.pageIndex = pageIndex;
            this.itemsPerPage = itemsPerPage;
            this.orderBy = orderBy;
            this.sortDirection = sortDirection;
            this.ids = ids != null ? ids.ToList() : new List<Guid>();
        }
}

エラーが発生します

Cannot convert expression type 'System.DateTime' to return type 'TOrderBy'ホバーするときa => a.Time

エラーCannot convert lambda expression to delegate type 'System.Func<MyType2,TOrderBy>' because some of the return types in the block are not implicitly convertible to the delegate return typeCannot implicitly convert type 'System.DateTime' to 'TOrderBy'ビルド時のエラー。

おそらく解決できると思いますが、コンストラクターで情報を取得して IQueryable を並べ替えてページングするクラスを作成しようとしています。オーバーロードされたコンストラクターを介してデフォルトを提供したい。どうすればこれを行うことができますか?

4

1 に答える 1

0
a => a.Time

時間はDateTime. TOrderByではない場合がありますDateTime。たとえば、次のようになります。

MyClass1<Car> x = new MyClass1<Car>(ids);

だから、あなたがやろうとしていることをすることはできません。


それTOrderByは大きな痛みです!TOrderBy最善の方法は、クラスの一部として を使用しないことで問題を回避することです。この回答は、順序付け式をラップして TOrderBy を外界から隠す方法を示しています。

于 2012-04-05T15:48:44.037 に答える