2014-01-28 77 views
0
轉換一個SQL查詢的謂詞表達式

我怎樣寫用流利的語法時纔到謂詞表達式下面的SQL查詢:用流利的Synatx

select c.* from customer c 
inner join Orders r on r.CustomerId = c.Id 
where 
    c.MemberSince > '01/01/2013' && 
    r.OrderDate > '01/01/2014' 
order by r.OrderDate 

我期待這樣的:

Expression<Func<Customer, bool>> filters = PredicateBuilder.True<Customer>(); 
filters = filters.And(x => x.MemberSince > DateTime.Parse('01/01/2013')); 
filterr = .... 

我不知道如何添加訂單謂詞。然後我打電話:

var list = db.Customers.AsExpandable().Where(filters).ToList(); 

回答

0

根本不需要PredicateBuilder。您只需要瞭解加入的結果實際上是一對序列:

DateTime memberCutoff = ...; 
DateTime orderCutoff = ...; 
var query = context.Customers 
        .Join(context.Orders, 
         c => c.Id, r => r.CustomerId, (c, r) => new { c, r }) 
        .Where(pair => pair.c.MemberSince > memberCutoff && 
            pair.r.OrderDate > orderCutoff) 
        .OrderBy(pair => pair.r.OrderDate); 
+0

好的。完善。如果我想用predicateBuilder來做到這一點,那怎麼可能? – user3237706

+0

@ user3237706:由於匿名類,這有點棘手。你可以使用'Tuple <,>'而不是匿名類,然後使用'PredicateBuilder'和'Expression ,bool>'。我不確定是否LINQ to SQL可以識別Tuple。 –