Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用GROUPBY的Linq动态查询_C#_Linq_Entity Framework 5 - Fatal编程技术网

C# 使用GROUPBY的Linq动态查询

C# 使用GROUPBY的Linq动态查询,c#,linq,entity-framework-5,C#,Linq,Entity Framework 5,我需要额外的where子句用于Linq查询。例如,如果客户选择了一个日期过滤器,那么我需要对我的查询进行日期过滤器等。。。当我尝试myQuery.Where谓词时,只有group by的字段可见 如何将新的where条件附加到查询中 //for example i need dynamically append o.OrderDate==Datetime.Now or another where clause var myQuery =(from o in _db.Orders join l

我需要额外的where子句用于Linq查询。例如,如果客户选择了一个日期过滤器,那么我需要对我的查询进行日期过滤器等。。。当我尝试myQuery.Where谓词时,只有group by的字段可见

如何将新的where条件附加到查询中

//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()
    });

查询结束时,您太晚了,无法在其中添加新的
。您已经对数据进行了分组和投影,删除了几乎所有的字段

尝试:

显然,如果
,您可以有多个
。每个
.Where()
都位于
&&
)和其他条件中

请注意,
join
的结果如何投影到具有两个属性的匿名类中:
Order
OrderLine

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)
                       });