2015-05-09 111 views
0

我需要额外的where子句为我的Linq查询。例如,如果客户选择一个日期过滤器,所以我需要日期过滤到我的查询等...当我尝试myQuery.Where谓词有可见只是由组字段。Linq动态查询与组

如何追加新的条件到我的查询。

//for example i need dynamically append o.OrderDate==Datetime.Now or another where clause 

var myQuery =(from o in _db.Orders 
join l in _db.OrderLines.Where(x => x.ParaBirimi == model.ParaBirimi) on o.orderId equals 
    l.OrderId 
where o.OrderDate.Value.Year == year1 
group o by new {o.OrderDate.Value.Month} 
into g 
select 
    new 
    { 
     Month = g.Key.Month, 
     Total = g.Select(t => t.OrderLines.Sum(s => s.OrderTotal)).FirstOrDefault() 
    }); 

回答

1

您在查询结尾添加新的Where已太迟。您已经对数据进行了分组,并进行了投影,几乎删除了所有字段。

尝试:

var baseQuery = from o in _db.Orders 
       join l in _db.OrderLines.Where(x => x.ParaBirimi == model.ParaBirimi) on o.orderId equals l.OrderId 
       where o.OrderDate.Value.Year == year1 
       select new { Order = o, OrderLine = l }; 

if (something) 
{ 
    baseQuery = baseQuery.Where(x => x.Order.Foo == "Bar"); 
} 

var myQuery = (from o in baseQuery 
       group o by new { o.Order.OrderDate.Value.Month } 
        into g 
        select 
         new 
         { 
          Month = g.Key.Month, 
          Total = g.Sum(t => t.OrderLine.OrderTotal) 
         }); 

显然可以有多个if。每个.Where()&&AND)与其他条件。

注意如何join的结果有两个属性的匿名类预计:OrderOrderLine