4

これは簡単な方法で可能ですか、それともパラメーターとしてスキップ/テイクを追加するだけですか?

public IEnumerable<T> GetKittens<T>(Expression<Func<Kitten, bool>> predicate = null) where T : KittenViewModel, new()
{

  var kittenModels = GetModels(); // IQueryable<T>

  // how can I make the predicate say 'select the top 10' or 
  // 'skip 5 and take 5'

  kittenModels = kittenModels.Where(predicate); 

}
4

1 に答える 1

6

定義による述語は、アイテムを含める必要があるかどうかを判断するブール テストです。コレクション内の位置に関するオブジェクトに関する何らかの情報がある場合 (これはありそうもないことです)、それを使用できますが、おそらく最善の方法は、メソッドに 2 つの引数 (取得とスキップ) を追加してから実行することです。このようなもの:

public IEnumerable<T> GetKittens<T>(Expression<Func<Kitten, bool>> predicate = null, int take = -1, int skip = -1) where T : KittenViewModel, new()
{

  var kittenModels = GetModels(); // IQueryable<T>

  if(skip > 0)
    kittenModels = kittenModels.Skip(skip);

  if(take > 0)
    kittenModels = kittenModels.Take(take);

  kittenModels = kittenModels.Where(predicate); 

}

通常、おそらく述語を適用してからスキップ/テイクしたいと思うでしょうが、あなたが何をしようとしているのかわからないので、私はそれを断言することはできません.

于 2014-10-07T12:31:36.587 に答える