簡體   English   中英

動態Linq查詢使用

[英]Dynamic Linq query using

我正在嘗試使用動態linq查詢進行文件過濾。 基本上,我讓用戶在我閱讀的XML文檔中定義WhereExpression和OrderByExpression字符串,然后將其應用於要從各個方向獲取的文件列表。 我在找到圖書館

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 =動態位置= 12 StackTrace:位於System.Linq.Dynamic.ExpressionParser.CheckAndPromoteOperands(類型簽名,字符串opName ,System.Linq.Dynamic.ExpressionParser.ParseComparison()處的System.Linq.Dynamic.ExpressionParser.ParseLogicalAnd()處的System.Linq.Dynamic.ExpressionParser.ParseLogicalOr()處的Expression,left,Expression&right和Int32 errorPos) System.Linq.Dynamic.ExpressionParser.Parse.Type.System.Linq.Dynamic.DynamicExpression.ParseLambda處的.Dynamic.ExpressionParser.ParseExpression()(ParameterExpression []參數,類型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)

如何正確指定我的表達方式以過濾列表? 提前致謝

您必須使用==而不是= 前者用於比較,后者用於分配。

Where方法的簽名是

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

因此,您可以使用所需類型的參數...

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

...要么...

Where("SubType = @0", 2)

...如果SubType是數字類型。

@0只是意味着:用params的第一個參數替換它。

(在@SubType是沒有必要的。)

當您遇到此錯誤時:

  Message=Operator '==' incompatible with operand types 'String' and 'Int32'

這就是說的話。 要更正該值,請將該值放在引號中。

WhereQuery**="@SubType = "/"02/"" 

這應該與您一起工作..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM