0
次のコードは、のASP.NETコアMicrosoft.Azure.DocumentDB.Core
(バージョン1.2.1)パッケージとLINQを使用してDocumentDbデータベースに対してクエリを作成するAPI用のコードです。DocumentDb .NET Core SDK - IQueryable.OrderByが無効なクエリを生成する
ただし、生成クエリは無効です。
public async Task<IEnumerable<T>> QueryAsync
(Expression<Func<T, bool>> predicate, string orderByProperty)
{
client.CreateDocumentQuery<T>(myCollectionUri)
.Where(predicate)
.OrderBy(x => orderByProperty)
.AsDocumentQuery();
/* rest of the code... */
}
// And I call it:
await repository.QueryAsync<Book>(x => x.Author == "Joe", "Price");
// class Book is a POCO with 3 properties: string Title, string Author, and decimal Price
/*
INVALID generated query:
SELECT * FROM root WHERE (root["Author"] = "Joe") ORDER BY "Price"
Correct query:
SELECT * FROM root WHERE (root["Author"] = "Joe") ORDER BY root["Price"]
*/
この動作は変更できますか?
はたぶんIQueryable<T>
に拡張メソッドを書くと、このようにそれを呼び出すことにより:
client.CreateDocumentQuery<T>(myCollectionUri)
.Where(predicate)
.DocumentDbOrderBy(orderByProperty) // new extension method
.AsDocumentQuery();
をあなたがそれをしたいときに 'OrderBy'はまだ、' AuthorId'が含まれていないのはなぜ「価格」と一緒にいること。また、生成されたクエリについて心配するのではなく、 'Price Asc'で間違った結果が出ることを示唆できますか? –
@MrinalKamboj実際のシナリオに基づいてサンプルを作成しました。ちょうど質問を編集しました – Poulad