タグ付けされた質問 「expression-trees」


21
ラムダ式からプロパティ名を取得する
ラムダ式を介して渡されたときにプロパティ名を取得するより良い方法はありますか?これが私が現在持っているものです。 例えば。 GetSortingInfo<User>(u => u.UserId); プロパティが文字列の場合にのみ、それをメンバー式としてキャストすることで機能しました。すべてのプロパティが文字列であるとは限らないため、オブジェクトを使用する必要がありましたが、それらはそれらの単項式を返します。 public static RouteValueDictionary GetInfo<T>(this HtmlHelper html, Expression<Func<T, object>> action) where T : class { var expression = GetMemberInfo(action); string name = expression.Member.Name; return GetInfo(html, name); } private static MemberExpression GetMemberInfo(Expression method) { LambdaExpression lambda = method as LambdaExpression; if (lambda == null) throw new …

1
Roslyn SyntaxNodesは再利用されますか?
私はRoslyn CTPを調査してきましたが、これはExpression Tree APIと同様の問題を解決しますが、どちらも不変ですが、Roslynはまったく異なる方法でそうします。 Expressionノードは親ノードへの参照がなく、を使用して変更ExpressionVisitorされます。そのため、大きなパーツを再利用できます。 SyntaxNode反対側のRoslyn は親への参照を持っているため、すべてのノードは事実上、再利用できないブロックになります。、などのメソッドはUpdate、ReplaceNode変更を加えるために提供されています。 これはどこで終わりますか?Document?Project?ISolution?APIは、ボタンの代わりにツリーの段階的な変更を促進しますが、各ステップは完全なコピーを作成しますか? なぜ彼らはそのような選択をしたのですか?私が見逃している興味深いトリックはありますか?

4
Expression.Quote()は、Expression.Constant()がまだ実行できないことを何を行うのですか?
注:以前の質問「LINQのExpression.Quoteメソッドの目的は何ですか?」」ですが、これを読むと、私の質問には答えられないことがわかります。 記載されている目的が何であるかを理解していExpression.Quote()ます。ただし、Expression.Constant()同じ目的に使用できます(Expression.Constant()すでに使用されているすべての目的に加えて)。そのため、なぜExpression.Quote()必要なのか全くわかりません。 これを示すために、慣例的に使用する簡単な例Quote(感嘆符でマークされた行を参照)を書きましたが、Constant代わりに使用しましたが、同じようにうまく機能しました。 string[] array = { "one", "two", "three" }; // This example constructs an expression tree equivalent to the lambda: // str => str.AsQueryable().Any(ch => ch == 'e') Expression<Func<char, bool>> innerLambda = ch => ch == 'e'; var str = Expression.Parameter(typeof(string), "str"); var expr = Expression.Lambda<Func<string, bool>>( Expression.Call(typeof(Queryable), …

4
LINQ to Entitiesは、IEntityインターフェイスを使用したEDMプリミティブまたは列挙型のキャストのみをサポートします
私は次の一般的な拡張メソッドを持っています: public static T GetById<T>(this IQueryable<T> collection, Guid id) where T : IEntity { Expression<Func<T, bool>> predicate = e => e.Id == id; T entity; // Allow reporting more descriptive error messages. try { entity = collection.SingleOrDefault(predicate); } catch (Exception ex) { throw new InvalidOperationException(string.Format( "There was an error retrieving …


4
コンパイルされたC#ラムダ式のパフォーマンス
コレクションに対する次の簡単な操作を検討してください。 static List<int> x = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; var result = x.Where(i => i % 2 == 0).Where(i => i > 5); 次に、式を使用します。次のコードはほぼ同等です。 static void UsingLambda() { Func<IEnumerable<int>, IEnumerable<int>> lambda = l => l.Where(i => i % 2 == …

8
ジェネリック拡張メソッド内で文字列列名を使用してIQueryableにOrderByを適用するにはどうすればよいですか?
public static IQueryable<TResult> ApplySortFilter<T, TResult>(this IQueryable<T> query, string columnName) where T : EntityObject { var param = Expression.Parameter(typeof(T), "o"); var body = Expression.PropertyOrField(param,columnName); var sortExpression = Expression.Lambda(body, param); return query.OrderBy(sortExpression); } OrderByのタイプはsortExpressionから推測されないため、実行時に次のように指定する必要があります。 var sortExpression = Expression.Lambda<T, TSortColumn>(body, param); または return query.OrderBy<T, TSortColumn>(sortExpression); ただし、TSortColumnは実行時にのみ決定できるため、これは不可能だと思います。 これを回避する方法はありますか?

7
ダミーのための表現ツリー?[閉まっている]
クローズ。この質問はもっと焦点を合わせる必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てるようにします。 7年前に閉鎖されました。 この質問を改善する このシナリオでは、私はダミーです。 私はこれらが何であるかをグーグルで読もうとしました、しかし私はそれを理解しません。誰かが私にそれらが何であるか、そしてなぜそれらが有用であるかについて簡単な説明を与えることができますか? 編集:私は.NetのLINQ機能について話している。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.