2011-01-31 2 views
0

私はradgridを持っていると私はフィルタリングしたときに、私のようなものを取得してradgridのFilterExpressionを使用する方法:私のLINQのデータソースの選択イベントでLINQの

"(iif(Name== null, \"\", Name).ToString().ToUpper().Contains(\"ap\".ToUpper()))" 

を、私はで私の結果では、このフィルタを使用したいですresults = results.Where(FilterExression)のようなことをしていますが、これは機能しません。

答えて

0

私はあなたが results.Whereような何かしたいと思う)

2

を(I =>(i.Name +を "AP" .ToUpper()) ")。ToStringメソッド()。TOUPPER()。(入って")ここに私が使用したものがあります:

Telerikのドキュメントから分かるように、RadGridには2つのフィルタモードがあります。 1つはLynq Dynamicで、もう1つはSQLのようなものです。あなたのデータソースがそれをサポートしていれば、デフォルトは動的だと思います。データソースがIEnumerableで、動的な式を有効にするためにListに変更しなければならないため、グリッドでSQL構文を使用していたケースが1つありました。 FilterExpressionプロパティをチェックするだけで、グリッドがどのモードにあるかを確認できます。 EnableLinqExpressionsプロパティもあります。

+0

何の痛み。ちょうどこれを見つけた。私の 'IQueryable'コレクションに' .ToList() 'を追加すると、filterexpressionがSQLのようなものからLINQのように変更されました。あなたは、アップヴォートを持っているかもしれません。 –

+1

文字列を受け入れる 'Where'メソッドのオーバーロードはありません。このコードは正しいのですか? – Grofit

+1

LINQ動的クエリライブラリが必要です(http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx )これが動作するために – Dave

0

マイソリューション

var z = RadGrid2.MasterTableView.FilterExpression; 
      string filter = ""; 
      if (z.Split('\"').Length > 3) 
      { 
       string v = "'" + z.Split('\"')[3] + "'"; 
       string c = z.Split('\"')[0]; 
       string opr = " like "; 
       c = c.Replace("(iif(", "").Replace(" ", "").Replace("==", "").Replace("null", "").Replace(",", ""); 

       filter = c + opr + v ; 
      } 
      else 
       filter = z; 


      e.InputParameters["filterExpression"] = filter;