を出力し、インデックス
のランダムなセットを作成することができます
まず、総結果セットのサイズを見つける:それは効率的でなければなりません
var result = MongoCollection
.AsQueryable()
.Where(x => x.Type == 1)
.Zip(indexes, (x, y)=> Tuple.Create(x,y))
.Where(tuple => randomSet.Any(r => r == tuple.Item2))
.Take(sampleSize) // for good measure, finish when all samples taken
.Select(t => t.Item1) // clear the indexes
.ToList();
を:ビュンことで、クエリに適用されます次に
var sampleSize = 10;
var rnd = new Random();
var indexes = Enumerable.Range(0, resultsCount-1);
var randomSet = indexes
.OrderBy(r => rnd.NextDouble())
.Take(sampleSize)
.ToList();
:
var resultsCount = MongoCollection
.AsQueryable()
.Where(x => x.Type == 1)
.Count();
を次にランダムなインデックスを作成メモリワイズですが、ネットワークワイズではありません。
これは、シミュレートされたDB項目とLinqpadのためのテストです:
var resultsCount = 30;
var sampleSize = 10;
// Create a random set of indexes
var rnd = new Random();
var indexes = Enumerable.Range(0, resultsCount-1);
var randomSet = indexes.OrderBy(r => rnd.NextDouble()).Take(sampleSize).ToList();
randomSet.OrderBy(r => r).Dump("Random set of indexes");
// Simulated resultset
// for convenience simulate db items from index set
var db = indexes.Select(x => "Result" + x.ToString());
// The query
var sampleOfResults =
db.Zip(indexes, (x, y)=> Tuple.Create(x,y))
.Where(tuple => randomSet.Any(r => r == tuple.Item2))
.Take(sampleSize) // for good measure, finish when all samples taken
.Select(t => t.Item1); // clear the indexes
sampleOfResults.ToList().Dump("Sample");
あなたはhttps://stackoverflow.com/questions/35990720/having-difficulty-using-mongodb([こちら]投稿解決策を試してみました-c-sharp-drivers-sample?noredirect = 1&lq = 1)? – felix
@felix私はそれを見ましたが、その解決策はLinqではありません。上記の私のコードステートメントから、私はLINQ Whereステートメントを保持している間に$サンプルをどのように追加できるのかよく分かりません。 – PoeHaH