2012-02-11 2 views
1

Я Черпая вдохновение из этого вопроса:Expression Tree как часть собственности

Convert Linq to Sql Expression to Expression Tree

Оригинальный плакат спросил, как преобразовать это в дерево выражений и получил хороший ответ, который можно увидеть в вышеупомянутая ссылка.

List<Region> lst = (from r in dc.Regions 
        where r.RegionID > 2 && r.RegionDescription.Contains("ern") 
        select r).ToList(); 

Как я могу получить свойство с методом get, который возвращает bool, который использует ExpressionTree? Я хотел бы быть в состоянии сделать что-то вроде этого (очевидно, что я не нужен == true):

List<Region> lst = (from r in dc.Regions 
        where (r.AwesomeProperty == true) 
        select r).ToList(); 

Как будет идти об определении AwesomeProperty?

ответ

1

Вы бы определили AwesomeProperty так же, как и любое другое свойство вашего объекта LINQ to SQL. Если предположить, что он будет введен в bool (так как вы сравните его с true), вы бы построить Where запрос следующим образом:

// Build the parameter to the where clause predicate and access AwesomeProperty 

var regionParameter = Expression.Parameter(typeof(Region), "region"); 

var awesomeProperty = Expression.Property(regionParameter, "AwesomeProperty"); 

// Build the where clause predicate using the AwesomeProperty access 

var predicate = Expression.Lambda<Func<Region, bool>>(awesomeProperty); 

// Get the table, which serves as the base query 

var table = dc.Regions.AsQueryable(); 

// Call the Where method using the predicate and the table as the base query 

var whereCall = Expression.Call(
    typeof(Queryable), 
    "Where", 
    new[] { table.ElementType }, 
    table.Expression, 
    predicate); 

// Get an IQueryable<Region> which executes the where call on the table 

var query = table.Provider.CreateQuery<Region>(whereCall); 

var results = query.ToList(); 
Смежные вопросы