applejam blog

アクセスカウンタ

zoom RSS C# LINQ Expression 式ツリーの作成

<<   作成日時 : 2010/05/16 20:44   >>

ナイス ブログ気持玉 1 / トラックバック 1 / コメント 0

皆様こんばんは

C#のLINQを楽しんでいます。

今日は、動的に式ツリーを作成する方法です。

Nullable<T>を比較するための式ツリー作成ではまったので参考までに。

static void Main(string[] args)
{
Data[] dataSource = new Data[] { new Data() {Name = "1", Value = null},
new Data() {Name = "2", Value = 200m},
new Data() {Name = "3", Value = null},
new Data() {Name = "4", Value = 400m},
new Data() {Name = "5", Value = 500m} };

// この式の条件を動的に作成する。
// var query = from d in dataSource.AsQueryable() where d.Value.Equals(200m) select d;

var query = from d in dataSource.AsQueryable() select d;
// パラメータ
ParameterExpression parameter = Expression.Parameter(typeof(Data), "d");
// 値
Expression property = Expression.Property(parameter, "Value");
// 条件
ConstantExpression filter = Expression.Constant(200m, typeof(object));
// Nullable<Decimal>のEqualsメソッドを取得
MethodInfo method = typeof(Nullable<Decimal>).GetMethod("Equals", new Type[] { typeof(object) });
// 式ツリーの作成
Expression expression = Expression.Call(property, method, new Expression[] { filter });
// 式ツリーの実行
query = query.Where(Expression.Lambda<Func<Data, bool>>(expression, parameter));
// 出力
foreach (Data data in query)
{
Console.WriteLine(string.Format("{0}:{1}", data.Name, data.Value));
}
Console.ReadKey();
}

class Data
{
public string Name { get; set; }
public decimal? Value { get; set; }
}

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ
気持玉数 : 1
ナイス

トラックバック(1件)

タイトル (本文) ブログ名/日時
プラダ トート
C# LINQ Expression 式ツリーの作成 applejam blog/ウェブリブログ ...続きを見る
プラダ トート
2013/07/10 01:25

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
C# LINQ Expression 式ツリーの作成 applejam blog/BIGLOBEウェブリブログ
文字サイズ:       閉じる