簡體   English   中英

如何在 C# 和 Entity Framework 中按日期和公司 ID 對表進行分組

[英]How to group a table by date and company id in C# and Entity Framework

我有這張桌子:

CREATE TABLE [dbo].[lcr_LogLastAccess] 
(
    [Id]                  INT IDENTITY (1, 1) NOT NULL,
    [logl_Company]        VARCHAR(100) NULL,
    [logl_Name]           VARCHAR(100) NULL,
    [logl_Login]          VARCHAR(100) NULL,
    [logl_AccessdDate]    DATETIME     NULL,
    [logl_Host]           VARCHAR(150) NULL,
    [logl_Browser]        VARCHAR(100) NULL,
    [logl_VersionBrowser] VARCHAR(50)  NULL,
    [logl_Platform]       VARCHAR(50)  NULL,
    [logl_CreatedOn]      DATETIME     NULL,

    CONSTRAINT [PK_LogLastAccess] 
        PRIMARY KEY CLUSTERED ([Id] ASC)
);

有了這些數據:

id  logl_company  logl_AccessdDate
----------------------------------
1    carrefour    22/12/20 19:00
2    express      22/12/20 18:00
3    carrefour    22/12/20 17:00
4    express      22/12/20 16:00
5    mendes       22/12/20 15:00

我需要打印這個:

Carrefour    22/12/20 19:00
Express      22/12/20 18:00
Mendes       22/12/20 15:00

因此,我需要按最近訪問日期 ( logl_AccessdDate ) 對 ( logl_Company ) 進行分組

我嘗試過並覺得我被困在什么地方:

using (var db = new AcessoContext()) 
{
    // var maxSample = db.lcr_LogLastAccess
    //    .Where(coluna => coluna.logl_AccessdDate == db.lcr_LogLastAccess.Max(coluna => coluna.logl_AccessdDate))     //Pega a maior data e retornar em string
    //    .First();
    // grupos.SelectMany(a => a.Where(b => b.logl_AccessdDate == a.Max(c => c.logl_AccessdDate)));

    var lista = new List<AcessoModel>();

    var grupos = db.lcr_LogLastAccess.AsEnumerable().GroupBy(coluna => coluna.logl_Company);

    foreach (var empresa in grupos)
    {
        Console.WriteLine(empresa);
    }

    Console.WriteLine(lista.Count() + "\n");
    Console.ReadLine();

    // PARA CADA EMPRESA NA COMPANY IMPRIMIR A LINHA INTEIRA QUE A DATA SEJA MAIS RECENTE      
}

我的計數說我的列表是空的..我的 foreach 返回

System.Linq.Grouping`2[System.String,CONSOLE_TESTE2.AcessoModel]

如何解決這個問題?

謝謝!

使用下面的LINQ得到結果 -

var grupos = db.lcr_LogLastAccess.GroupBy(g => g.logl_Company).Select(s => new
        {
            logl_Company = s.Key,
            logl_AccessdDate = s.Max(m => m.logl_AccessdDate)
        }).ToList();

暫無
暫無

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

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