web-dev-qa-db-ja.com

C#コレクションを使用して複雑な検索を実行する

ジェネリックタイプTの何百万ものアイテムを含むコレクションがあります。このリストは変更されないと仮定します。タイプTのフィールドのサブセットを使用して、さまざまなタイプの検索を実行したいと考えています。フィールドが1つしかないものもあれば、2つ以上のフィールドがあるものもあります。ほとんどの場合、検索ごとに複数の結果が返されます。

この答えは私が望むものに非常に近いですが、それは1つのフィールドだけの検索でのみ機能します:

https://codereview.stackexchange.com/questions/40811/multiple-indexes-over-an-in-memory-collection-for-faster-search

3
deeproute

実際、投稿したリンクと同じようにコードを使用できます。次のように呼び出します。

  var fc = new FastCollection<Product>(products);

  fc.AddIndex(item => new { UserName = item.UserName, Title = item.Title});

  string userName = "...";
  string title = "...";

  // finds items where UserName == userName and Title == title
  var items = 
     fc.FindValue(
        item => new { UserName = item.UserName, Title = item.Title}, 
                new { UserName = userName     , Title = title })
        .ToArray();

このコードは、匿名型を使用して、複数のプロパティの集合である単一の「プロパティ」を作成します。

これは、RavenDBでインデックスがどのように実行されるかを思い出させます。

3
Euphoric