簡體   English   中英

如何在c#linq查詢中從表中選擇最大日期

[英]How to select the max date from table in c# linq query

我在這里堆棧我需要有人幫助。 我想從不同的表中獲取最大日期,其中 Refno 等於 Refno。 我當前的代碼給出了 actionrecords 表中存在的所有日期。

我當前的代碼看起來像

public IQueryable<EmployerDetails> _employerProfileOverview(string refNo, string organisationname, string tradingname)
{
    var query = (from _employerdetails in _entities.Organisations
                 join _lasttransaction in _entities.LevyTransactions on _employerdetails.Refno equals _lasttransaction.Refno
                 select new EmployerDetails
                 {
                     RefNo = _employerdetails.Refno,
                     Surname = _employerdetails.Surname,
                     TradingName = _employerdetails.TradingName,
                     Status = _employerdetails.Status,
                     TransactionDate = _lasttransaction.TransactionDate
                 });
    if (string.IsNullOrEmpty(refNo).Equals(false))
        query = query.Where(x => x.RefNo.Contains(refNo.Trim()));

    if (string.IsNullOrEmpty(organisationname).Equals(false))
        query = query.Where(x => x.Surname.Contains(organisationname.Trim()));

    if (string.IsNullOrEmpty(tradingname).Equals(false))
        query = query.Where(x => x.TradingName.Contains(tradingname.Trim()));

    return query;
}

我的輸出看起來像這樣

 Refno      TradingName                  Status  TransactionDate
L940732953  PSG KONSULT BPK LICHTENBURG     A   2011-01-01 00:00:00.000
L940732953  PSG KONSULT BPK LICHTENBURG     A   2012-03-01 00:00:00.000 
L940732953  PSG KONSULT BPK LICHTENBURG     A   2012-04-01 00:00:00.000
L940732953  PSG KONSULT BPK LICHTENBURG     A   2012-05-01 00:00:00.000
L940732953  PSG KONSULT BPK LICHTENBURG     A   2012-06-01 00:00:00.000
L940732953  PSG KONSULT BPK LICHTENBURG     A   2012-07-01 00:00:00.000
L940732953  PSG KONSULT BPK LICHTENBURG     A   2012-08-01 00:00:00.000
L940732953  PSG KONSULT BPK LICHTENBURG     A   2012-09-01 00:00:00.000
L940732953  PSG KONSULT BPK LICHTENBURG     A   2012-10-01 00:00:00.000
L940732953  PSG KONSULT BPK LICHTENBURG     A   2012-11-01 00:00:00.000
L940732953  PSG KONSULT BPK LICHTENBURG     A   2012-12-01 00:00:00.000 
L940732953  PSG KONSULT BPK LICHTENBURG     A   2013-01-01 00:00:00.000
L940732953  PSG KONSULT BPK LICHTENBURG     A   2013-02-01 00:00:00.000
L940732953  PSG KONSULT BPK LICHTENBURG     A   2013-03-01 00:00:00.000
L940732953  PSG KONSULT BPK LICHTENBURG     A   2013-04-01 00:00:00.000
L940732953  PSG KONSULT BPK LICHTENBURG     A   2013-05-01 00:00:00.000
L940732953  PSG KONSULT BPK LICHTENBURG     A   2013-05-01 00:00:00.000 
L940732953  PSG KONSULT BPK LICHTENBURG     A   2013-06-01 00:00:00.000 
L940732953  PSG KONSULT BPK LICHTENBURG     A   2013-11-01 00:00:00.000 
L940732953  PSG KONSULT BPK LICHTENBURG     A   2013-12-01 00:00:00.000 
L940732953  PSG KONSULT BPK LICHTENBURG     A   2014-01-01 00:00:00.000 
L940732953  PSG KONSULT BPK LICHTENBURG     A   2014-02-01 00:00:00.000 
L940732953  PSG KONSULT BPK LICHTENBURG     A   2014-03-01 00:00:00.000 
L940732953  PSG KONSULT BPK LICHTENBURG     A   2014-04-01 00:00:00.000 
L940732953  PSG KONSULT BPK LICHTENBURG     A   2014-05-01 00:00:00.000 
L940732953  PSG KONSULT BPK LICHTENBURG     A   2014-06-01 00:00:00.000 
L940732953  PSG KONSULT BPK LICHTENBURG     A   2014-07-01 00:00:00.000 
L940732953  PSG KONSULT BPK LICHTENBURG     A   2014-08-01 00:00:00.00  
L940732953  PSG KONSULT BPK LICHTENBURG     A   2014-09-01 00:00:00.000 
L940732953  PSG KONSULT BPK LICHTENBURG     A   2014-10-01 00:00:00.000 
L940732953  PSG KONSULT BPK LICHTENBURG     A   2014-11-01 00:00:00.000 
L940732953  PSG KONSULT BPK LICHTENBURG     A   2014-12-01 00:00:00.000 
L940732953  PSG KONSULT BPK LICHTENBURG     A   2015-01-01 00:00:00.000 
L940732953  PSG KONSULT BPK LICHTENBURG     A   2015-02-01 00:00:00.000 
L940732953  PSG KONSULT BPK LICHTENBURG     A   2015-03-01 00:00:00.000 
L940732953  PSG KONSULT BPK LICHTENBURG     A   2015-04-01 00:00:00.000 
L940732953  PSG KONSULT BPK LICHTENBURG     A   2015-05-01 00:00:00.000 
L940732953  PSG KONSULT BPK LICHTENBURG     A   2015-06-01 00:00:00.000 
L940733035  BROUGHTON AND JONCK             A   2011-05-01 00:00:00.000 
L940733035  BROUGHTON AND JONCK             A   2011-05-01 00:00:00.000 
L940733035  BROUGHTON AND JONCK             A   2011-05-01 00:00:00.000 
L940733035  BROUGHTON AND JONCK             A   2011-05-01 00:00:00.000 
L940733035  BROUGHTON AND JONCK             A   2011-05-01 00:00:00.000 
L940733035  BROUGHTON AND JONCK             A   2011-05-01 00:00:00.000 
L940736574  COVERS FOODS CC                 Y   2011-03-01 00:00:00.000 
L940736574  COVERS FOODS CC                 Y   2011-03-01 00:00:00.000 
L940736574  COVERS FOODS CC                 Y   2011-05-01 00:00:00.000 
L940736574  COVERS FOODS CC                 Y   2011-05-01 00:00:00.000 
L940738141  TEAMWORX SHOPFITTERS (PTY) LTD  A   2011-01-01 00:00:00.000
L940738141  TEAMWORX SHOPFITTERS (PTY) LTD  A   2011-02-01 00:00:00.000
L940738141  TEAMWORX SHOPFITTERS (PTY) LTD  A   2011-02-01 00:00:00.000
L940738141  TEAMWORX SHOPFITTERS (PTY) LTD  A   2011-04-01 00:00:00.000
L940738141  TEAMWORX SHOPFITTERS (PTY) LTD  A   2011-05-01 00:00:00.000

我只想顯示每個 Refno 的 max(Transaction) 。

請幫幫我。

您需要在此處使用group by並使用Max擴展方法來查找最大交易日期:-

 var query = (from _employerdetails in _entities.Organisations
              join _lasttransaction in _entities.LevyTransactions 
              on _employerdetails.Refno equals _lasttransaction.Refno
              group new { _employerdetails, _lasttransaction } 
              by new { _employerdetails.Refno, 
                       _employerdetails.Surname_employerdetails.TradingName, 
                       _employerdetails.Status } into g
              select new EmployerDetails
              {
                  RefNo = g.Key.RefNo ,
                  Surname = g.Key.Surname,
                  TradingName = g.Key.TradingName,
                  Status = g.Key.Status,
                  TransactionDate = g.Max(x => x._lasttransaction .TransactionDate)
              });

另外,作為一個旁注,因為String.IsNullOrEmpty返回布爾值,不需要將它與falsetrue進行比較。 您可以直接執行此操作:-

if (!string.IsNullOrEmpty(refNo))
        query = query.Where(x => x.RefNo.Contains(refNo.Trim()));

您可以在 return 語句之前添加以下行:

query = query.OrderByDescending(q => q.TransactionDate).First();

另一種選擇是在MoreLinq 中使用 Max by 屬性函數,這將使代碼更加優雅。

另外,你應該寫:

 if (!string.IsNullOrEmpty(refNo))

暫無
暫無

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

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