2

埋め込みドキュメントの値で結果を並べ替えようとしています。

次のようなモデルを検討してください。

public class Car
{
    public Guid ID { get; set; }
    public string Name { get; set; }

    public IEnumerable<Passenger> Passengers { get; set; }
}

public class Passenger
{
    public Guid ID { get; set; }
    public virtual string Name { get; set; }
    public virtual int Age { get; set; }
}

Carコレクションをクエリして、Passenger.Age で注文しようとしています。

私のクエリは次のようになります。

var results = (from car in _db.GetCollection<Car>("car").AsEnumerable()
              from passenger in car.Passengers
              where car.Name == "Ford"
              orderby passenger.Age).ToList();

これにより、次の例外が発生します。

SelectMany クエリ演算子はサポートされていません。

これは当然のことながら、C# mongo ドライバーの制限です。
回避策はありますか?

それができない場合、 .ToList() の後にどのように注文できますか?

4

1 に答える 1

2

おそらくこれを書き直して、後ろからコレクションAsQueryable()を取得し、そこから、 :で直接サポートされている操作だけでなく、使用する任意のLINQでさらにクエリを実行できます。IEnumerableToList()MongoCollection

var passengers = _db.GetCollection<Car>("car").AsQueryable().ToList()
    .Where(car => car.Name == "Ford")
    .SelectMany(ford => ford.Passengers)
    .OrderBy(p => p.Age);

ここで、MongoDb C#ドライバーで直接サポートされているLINQ操作を見つけることができます。

于 2012-07-11T14:26:14.987 に答える