動的な Linq クエリを作成することを意図している場合は、式ツリーを使用することをお勧めします。ロジックを記述した Expression Tree を作成し、Expression.Lambda を呼び出すだけで、ツリーをデリゲートにコンパイルできます。
参照ドキュメントは次のとおりです。
http://msdn.microsoft.com/en-us/library/bb397951.aspx
編集:
以下にいくつかのサンプル コードを示します。何が何なのかわからないRadGrid1.MasterTableView.GetColumn(\"MemberName"\).CurrentFilterValue
ので、ステートメントの評価結果のプレースホルダーとして "CurrentFilterValue" を使用しました。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
namespace ConsoleApplication1
{
public sealed class Document
{
public string MemberName { get; set; }
}
public static class Program
{
public static void Main(string[] args)
{
// Setup...
var documents = new List<Document>();
documents.Add(new Document { MemberName = "Test 1 + CurrentFilterValue" });
documents.Add(new Document { MemberName = "Test 2 + CurrentFilterValue" });
documents.Add(new Document { MemberName = "Test 3"});
// Create the expression tree...
var parameter = Expression.Parameter(typeof(Document), "document");
var isNotNull = Expression.NotEqual(parameter, Expression.Constant(null));
var containsIsTrue =
Expression.IsTrue(
Expression.Call(Expression.Property(parameter, "MemberName"),
typeof(string).GetMethod("Contains"),
Expression.Constant("CurrentFilterValue")));
var bothAreTrue = Expression.And(isNotNull, containsIsTrue);
var lambda = Expression.Lambda<Func<Document, bool>>(bothAreTrue, parameter).Compile();
// Test...
var results = documents.Where(d => lambda(d));
}
}
}