簡體   English   中英

Linq動態查詢與分組依據

[英]Linq Dynamic Query With Group By

我的Linq查詢需要額外的where子句。 例如,如果客戶選擇一個日期過濾器,那么我需要對我的查詢進行日期過濾,等等...當我嘗試使用myQuery.Where謂詞時,僅可見分組依據的字段。

我如何在查詢中附加新的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 您已經對數據進行了分組和投影,幾乎刪除了所有字段。

嘗試:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM