Created
May 2, 2013 11:36
-
-
Save mjul/5501644 to your computer and use it in GitHub Desktop.
Navigating Linq expression trees to get names of nodes, member accessors etc. This can be used to compile Linq expressions, e.g. transforming expressions to query code for external systems like services or databases.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Linq.Expressions; | |
using NUnit.Framework; | |
namespace LinqExperiments | |
{ | |
[TestFixture] | |
public class LinqExpressionsTest | |
{ | |
private class NumberedText | |
{ | |
public int Number { get; set; } | |
public string Text { get; set; } | |
} | |
[Test] | |
public void Property_Number_CanIdentifyNameOfProperty() | |
{ | |
Expression<Func<NumberedText, int>> expression = (NumberedText x) => x.Number; | |
var body = expression.Body; | |
Assert.That(body.NodeType, Is.EqualTo(ExpressionType.MemberAccess)); | |
var memberExpression = body as MemberExpression; | |
Assert.That(memberExpression, Is.Not.Null); | |
Assert.That(memberExpression.Member.Name, Is.EqualTo("Number")); | |
} | |
[Test] | |
public void Property_Text_CanIdentifyTypeOfProperty() | |
{ | |
Expression<Func<NumberedText, string>> expression = (NumberedText x) => x.Text; | |
var body = expression.Body; | |
Assert.That(body.NodeType, Is.EqualTo(ExpressionType.MemberAccess)); | |
var memberExpression = body as MemberExpression; | |
Assert.That(memberExpression, Is.Not.Null); | |
Assert.That(memberExpression.Type, Is.EqualTo(typeof (string))); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment