典型的な顧客と注文のシナリオがあるとします。顧客のコレクションがあり、各顧客ドキュメントには注文のリストがあります。ここで、注文日が先週以内の顧客、つまり DateTime.UtcNow.AddDays(-7) より大きく、DateTime.UtcNow より小さい顧客を照会したいと考えています。
var startDate = DateTime.UtcNow.AddDays(-7);
var endDate = DateTime.UtcNow;
var query = collection.AsQueryable<Customer>()
.Where(c => c.Orders.Any(o => o.OrderDate > startDate && o.OrderDate < endDate))
.SelectMany(b => b.Orders);
これにより、次のエラーが発生します。
System.NotSupportedException: The SelectMany query operator is not supported.
at MongoDB.Driver.Linq.SelectQuery.TranslateMethodCall(MethodCallExpression methodCallExpression) in C:\\build\\mongo-csharp-driver\\Driver\\Linq\\Translators\\SelectQuery.cs:line 687
私の現在の解決策はかなり厄介です:
var customers =
collection.AsQueryable<Customer>()
.Where(c =>
c.Orders.Any(o =>
o.OrderDate > startDate &&
o.OrderDate < endDate))
.ToList();
var results = new List<Order>();
foreach (var orders in customer.Select(c =>
c.Orders.Where(o =>
o.OrderDate > startDate &&
o.OrderDate < endDate)))
{
results.AddRange(orders);
}
return results;
これを達成するためのより良い方法はありますか?