で動作します...それはのIQueryableにORDERBYを行います...しかし、私は1つが通常のIQueryable(非ジェネリックを)やってみたかったIQueryable(非汎用):カウントがスキップされ、スキップされますか?それは私が人は私を与えるために本当に便利でした拡張メソッドを持っているのIQueryable <T>
ここでコードは、カウントとスキップと私はテイクがないと思う。
public static IQueryable GetPage(this IQueryable query,
int page, int pageSize, out int count)
{
int skip = (int)((page - 1) * pageSize);
count = query.Count(); //COUNT DOESN'T EXIST
return query.Skip(skip).Take((int)pageSize); // NEITHER SKIP
}
これは完全にエラーなしです。
public static IQueryable<T> GetPage<T>(this IQueryable<T> query,
int page, int pageSize, out int count)
{
int skip = (int)((page - 1) * pageSize);
count = query.Count();
return query.Skip(skip).Take((int)pageSize);
}
どのように私はこれを回避することができますか?私は戻り値の型を完全に動作させるので、ToDataTableと呼ばれる別の拡張メソッドがあり、汎用でないIQueryableでも機能します。
回避策はありますか?私はGETPAGE非ジェネリックバージョンを削除しようとしたが、その後、私の非ジェネリックのIQueryableは」doesnの既存のIQueryable
IQueryable<Client> gen = null;
IQueryable nongen = null;
var test = gen.GetPage(); //COMPILES!
var test 1 = non.GetPage(); // Doesn't compile because GETPAGE
// for non generic is broken as it has
// invalid methods like COUNT and SKIP etc.
にそうようにそれを呼び出す事前
EDIT
で
感謝IqueryableではなくIQueryableのみであるという事実のために拡張子をピックアップする
ありがとうございます!あなたはC#4.0と言っています - 私は3.5を使っています。だから私は3.5で標準反射を使うことができますか?私は推測します? – Martin
@Martin:はい。あなたは 'query'の具体的な型を取得し、それがどのインタフェースを実装しているかを調べる必要があります。それを介して' T'を見つけ、次に 'MethodInfo.MakeGenericMethod'を使って' Queryable.Count'などを呼び出す必要があります。非常に手早く乱雑になる。 –
はい!ああ、うーん、考えてみよう:-)確認のためにありがとう。 – Martin