動的Linqライブラリを使用してブール式を解析しています。この方法では:
public static LambdaExpression Parse(SearchQuery query)
{
string compilableExpression = BuildCompilableExpression(query);
ParameterExpression parameter = System.Linq.Expressions.Expression.Parameter(typeof(EventListItem));
return System.Linq.Dynamic.DynamicExpression.ParseLambda(new[] { parameter }, null, compilableExpression);
}
BuildCompilableExpression
は次の文字列を返します。
"long.Parse(InstanceID.ToString()) == long.Parse(\"2\")"
どちらが正しいか( InstanceID
はEventListItem
プロパティ)、ただし、 ParseLambda()
呼び出しは次の例外で失敗します。
No property or field 'long' exists in type 'EventListItem'
string.Compare()
を含む式を解析しようとしましたが、うまく機能します。そのため、なぜlong.Parse()
が機能しないのか理解できません。誰かがこれをやったことがあるのかと思っていました。どんな助けでもありがたいです。
long
は型の名前ではなく、C#によって提供されるショートカットです。 Int64
は技術名ですが、試しましたか?同様に、 String
は文字列型の名前です。
C#では大文字と小文字が区別されますが、アナライザーではそうでない場合があるため、 string
が機能した可能性があることに注意してください。
long
型は.NETに存在しません。 long
はC#キーワードであり、.NET型System.Int64
エイリアスです。 Int64.Parse(...)
を使用してみてください。