LINQ konvertiert anonyme Liste in groupBY stark mit Datumsaufteilungen

Ich versuche, tägliche Protokolle in Monaten in einer linq-Abfrage von einem dbset zu gruppieren, indem ich über oder unter einen Prozentsatz der erlaubten Nutzung gelangt.

Das dbset ist aktiviert

public partial class DailyUsageForYear
{
    public System.DateTime DateAdded { get; set; }
    public Nullable NumUsers { get; set; }
    public int AllowedUsageCount { get; set; }
    public string Application { get; set; }
    public System.Guid ApplicationID { get; set; }
    public System.Guid SupplierID { get; set; }
}

Ich versuche das eine Liste von Objekten wie zu bekommen

public class UsageDisplay
{
    public int Year { get; set; }
    public int Month { get; set; }
    public string Application { get; set; }
    public int NumUsers { get; set; }
    public int AllowedUsageCount { get; set; }
    public Guid ApplicationID { get; set; }
}

Allerdings scheint die Auswahl am Ende meiner Aussage die Feldnamen nicht zu verstehen, kann mir bitte jemand sagen, was fehlt mir an der linq-Syntax?

var predicate = PredicateBuilder.False();
    predicate = predicate.And (x => x.NumUsers > (x.AllowedUsageCount *    (DropPercentage/100)));
if (supplier != null)
{
    Guid supplierGuid = new Guid (supplier.ToString());
    predicate = predicate.And (x => x.SupplierID == supplierGuid);
}
if (Direction == 0)
    predicate = predicate.And (x => x.NumUsers < (x.AllowedUsageCount * (Percentage/100)));
else
    predicate = predicate.And (x => x.NumUsers > (x.AllowedUsageCount * (Percentage/100)));
usageDetailModel.usage = db.DailyUsageForYears.**Where**(predicate)
    .**GroupBy**(x => new { x.DateAdded.Year, x.DateAdded.Month, x.Application, x.NumUsers, x.SeatCount, x.LicenceID })
    .**Select**(u => new UsageDisplay() { Year = u.DateAdded.Year, Month = u.DateAdded.Month, Application = u.Application, NumUsers = u.NumUsers, SeatCount = u.SeatCount, ApplicationId = u.ApplicationID });
0
Löschen Sie den .DateAdded , der zweimal in Ihrem Select erscheint. Das anonyme Objekt nimmt nur den letzten Eigenschaftsnamen auf.
hinzugefügt der Autor Rawling, Quelle

1 Antworten

Inside last u ist nicht DailyUsageForYear sein grouppping-Objekt mit Key -Feld, also versuche deine Auswahl wie folgt zu ändern

.Select(u => new UsageDisplay() { 
                    Year = u.Key.Year, 
                    Month = u.Key.Month, 
                    Application = u.Key.Application, 
                    NumUsers = u.Key.NumUsers, 
                    SeatCount = u.Key.SeatCount, 
                    ApplicationId = u.Key.ApplicationID 
                });

auch in

.GroupBy(x => new { 
        x.DateAdded.Year, 
        x.DateAdded.Month, 
        x.Application,
        x.NumUsers, 
        x.SeatCount, 
        x.LicenceID })

Ich denke, dass Sie x.ApplicationId anstelle von x.LicenceID benötigen

0
hinzugefügt
Das war der Schlüssel zum Problem, danke
hinzugefügt der Autor user2903089, Quelle