簡體   English   中英

使用LINQ進行分組和加入

[英]Perform group and join using LINQ

有沒有人對我僅使用LINQ如何做到這一點有任何建議?

var statements = db.vwOutstandingStatements.ToList();

var amounts = (from s in db.vwOutstandingStatements
                  group s by s.Id into v
                  select new 
                  {
                      Id = v.Key,
                      amount = v.Sum(a => a.Amount)
                  }).ToList();

List<vmVendorStatements> statementsToProcess = new List<vmVendorStatements>();

foreach (var amount in amounts)
{
    var statement = statements.Find(s => s.Id == amount.Id);
    statementsToProcess.Add(new vmVendorStatements()
    {
        Id = statement.Id,
        PropertyAddress = statement.PropertyNumber + " " + statement.PropertyStreet + " " + statement.PropertyTown,
        StatementDate = statement.StatementDate.ToLongDateString(),
        Amount = amount.amount.ToString()
    });
}

語句是通過EF5從sql視圖獲取的。 我運行LINQ來獲取按返回視圖中的金額總和分組的數據,然后將其重新合並以顯示返回視圖中的一些詳細信息以及總金額。 StatementsToView是我的視圖模型,用於將數據導入MVC視圖。

我確信它可以在SQL中完成,無論如何我都可以這樣做,但似乎似乎也必須針對上述情況提供更整潔的解決方案。

謝謝,

傑森

您可以僅獲取組中的第一項,而不必重新查詢以找到第一項:

var statementsToProcess =
    (from s in db.vwOutstandingStatements
    group s by s.Id into v
    let first = v.First()
    select new vmVendorStatements()
    {
        Id = v.Key,
        amount = v.Sum(a => a.Amount),
        PropertyAddress = first.PropertyNumber + " " + first.PropertyStreet + " " + first.PropertyTown,
        StatementDate = first.StatementDate.ToLongDateString(),
    }).ToList();

暫無
暫無

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

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