1

ファイル フィルタリングに動的 linq クエリを使用しようとしています。基本的に、ユーザーに WhereExpression および OrderByExpression 文字列を XML ドキュメントで定義してもらい、それを読み取ってから、さまざまな方向にソースされるファイルのリストに適用します。で図書館を見つけました

http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

そしてそれを使用することにしましたが、私はいくつかの問題を抱えているようです. これまでのところ、 where 式と Orderby を IQueryable リスト e.ge に渡そうとすると

 **WhereQuery**="@SubType = 02" 
 **OrderByQuery**="FormID"

      var sortedRepos = Repos.Where(dir.WhereExpression).OrderBy(dir.OrderByExpression);

次のエラー メッセージが表示されます。

System.Linq.Dynamic.ParseException がキャッチされました Message=Operator '=' オペランドの型 'String' および 'Int32' と互換性がありません Source=Dynamic Position=12 StackTrace: at System.Linq.Dynamic.ExpressionParser.CheckAndPromoteOperands(Type signatures, String opName 、Expression& left、Expression& right、Int32 errorPos) System.Linq.Dynamic.ExpressionParser.ParseComparison() で System.Linq.Dynamic.ExpressionParser.ParseLogicalAnd() で System.Linq.Dynamic.ExpressionParser.ParseLogicalOr() で System.Linq .Dynamic.ExpressionParser.ParseExpression() で System.Linq.Dynamic.ExpressionParser.Parse(Type resultType) で System.Linq.Dynamic.DynamicExpression.ParseLambda(ParameterExpression[] パラメータ、Type resultType、文字列式、Object[] 値)

このように比較演算子を使用すると、

 **WhereQuery="@SubType == 02" 
 OrderByQuery="FormID"**

次のエラーも表示されます

System.Linq.Dynamic.ParseException was caught
  Message=Operator '==' incompatible with operand types 'String' and 'Int32'
  Source=Dynamic
  Position=12
  StackTrace:
       at System.Linq.Dynamic.ExpressionParser.CheckAndPromoteOperands(Type signatures, String opName, Expression& left, Expression& right, Int32 errorPos)
       at System.Linq.Dynamic.ExpressionParser.ParseComparison()
       at System.Linq.Dynamic.ExpressionParser.ParseLogicalAnd()
       at System.Linq.Dynamic.ExpressionParser.ParseLogicalOr()
       at System.Linq.Dynamic.ExpressionParser.ParseExpression()
       at System.Linq.Dynamic.ExpressionParser.Parse(Type resultType)
       at System.Linq.Dynamic.DynamicExpression.ParseLambda(ParameterExpression[] parameters, Type resultType, String expression, Object[] values)
       at System.Linq.Dynamic.DynamicExpression.ParseLambda(Type itType, Type resultType, String expression, Object[] values)
       at System.Linq.Dynamic.DynamicQueryable.Where(IQueryable source, String predicate, Object[] values)
       at System.Linq.Dynamic.DynamicQueryable.Where[T](IQueryable`1 source, String predicate, Object[] values)

リストをフィルタリングするために式を正しく指定するにはどうすればよいですか? 前もって感謝します

4

3 に答える 3

4

==の代わりに使用する必要があり=ます。前者は比較に使用され、後者は代入に使用されます。

于 2013-06-21T23:31:08.073 に答える
1

Whereメソッドのシグネチャは

public static IQueryable<T> Where<T>(this IQueryable<T> source, 
                                     string predicate,
                                     params object[] values)

したがって、目的のタイプのパラメーターを使用できます...

Where("SubType = @0", "02")

...また...

Where("SubType = @0", 2)

...ifSubTypeは数値型です。

@0これを の最初のパラメータに置き換えますparams

@SubTypeは必要ありません。)

于 2013-06-22T20:37:47.987 に答える