0

別のタイプの IQueryable に変換する拡張メソッドを IQueryable に追加することは可能ですか?

このようなものを探しています。

IQueryable<foo> source;
IQueryable<bar> result = source.Convert<bar>();

私はこれを持っていますが、明らかに機能していません。笑

public static IQueryable<T1> Convert<T2>(this IQueryable<T1> source) where T1 : class
{
    // Do some stuff
}

前もって感謝します。

4

2 に答える 2

6

確かにそれはすでにそこにありSelectます-変​​換を提供するだけです。たとえば、長さを取得して an を to に変換するには、次のようにしますIQueryable<string>IQueryable<int>

IQueryable<string> source = ...;
IQueryable<int> lengths = source.Select(x => x.Length);
于 2013-03-03T19:30:17.330 に答える
1

元のクエリ可能なものと同じタイプ ( IQueryable<T1>) を返しているため、拡張メソッドは を取得してをIQueryable<foo>返しIQueryable<foo>ますIQueryable<bar>。また、T2 をジェネリック型パラメーターとして定義しますが、T1 は定義しません。これに変更できます:

public static IQueryable<T2> Convert<T1, T2>(IQueryable<T1> source) where T1 : class
{
...
}

次に、次のように呼び出します。

IQueryable<Bar> result = source.Convert<Foo, Bar>();

しかし.. Jon が指摘するように、これは Select で行うことができます。fooとの間の変換がbarそれほど簡単でない場合、または再利用したい場合は、IQueryable を IQueryable に変換するのではなく、そのマッピングを定義できます。

于 2013-03-03T19:52:15.910 に答える