OData Web サービスに対する動的検索用の動的 linq 式を作成する必要があります。基本的な検索は機能していますが、機能しないネストされたテーブルがあります。
形式は webservice/Books('id')/Author です
これを機能させることができます
var authors = from p in webservice.Books.Expand("Author")
where p.Title.Equals("Watership Down") && p.Author.FirstName.Equals("Richard")
select p;
私はそれを次のように変更しました:
var authors = webservice.Books.Expand("Author").Where(condition);
そして、私は次のように条件を構築します:
ParameterExpression pe = Expression.Parameter(typeof(webservice.Books), "p");
Expression left = Expression.Property(pe, "Title");
Expression right = Expression.Constant("Watership Down");
Expression predicateBody = Expression.Equal(left, right);
Expression<Func<webservice.Books, bool>> condition = Expression.Lambda
<Func<webservice.Books, bool>>(predicateBody, new ParameterExpression[] { pe });
これは機能します。
だから私が試してみると
ParameterExpression pe = Expression.Parameter(typeof(webservice.Books), "p");
Expression left = Expression.Property(pe, "Title");
Expression right = Expression.Constant("Watership Down");
Expression e = Expression.Equal(left, right);
left = Expression.Property(pe, "Author.FirstName");
right = Expression.Constant("Richard");
Expression e2 = Expression.Equal(left, right);
Expression predicateBody = Expression.And(e, e2);
Expression<Func<webservice.Books, bool>> condition = Expression.Lambda
<Func<webservice.Books, bool>>(predicateBody, new ParameterExpression[] { pe });
しかし、うまくいきません。Author.FirstName をプロパティとして認識しません。pe を Books 型として宣言しているため、ネストされた Author が表示されないためだと思いますが、宣言する方法がわからないため、ネストされたデータが表示されます。
正確なエラー メッセージは、インスタンス プロパティ 'Author.FirstName' がタイプ 'webServices.Books' に対して定義されていません
誰もこれを行う方法を知っていますか? それは可能ですか?誰でもこれで提供できる助けをありがとう。
このエラーを解決するために私がしなければならなかったことは、 left = Expression.Property(pe, "Author.FirstName"); を変更することでした。式プロパティへ = Expression.Property(pe, "作成者"); left = Expression.Property(property, "FirstName");
そして今、それは機能します!
ありがとう!