LINQ convirtiendo la lista anónima para escribir fuertemente con divisiones de fecha en groupBY

Intento agrupar los registros diarios en meses en una consulta de linq desde un dbset, obteniendo un porcentaje superior o inferior al permitido.

El dbset está activado

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; }
}

Estoy tratando de obtener una lista de objetos como

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; }
}

Sin embargo, el seleccionar al final de mi declaración no parece entender los nombres de campo, ¿alguien puede decirme por favor, qué me estoy perdiendo sobre la sintaxis de linq?

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
Coloque el .DateAdded que aparece dos veces en su Select . El objeto anónimo solo recoge el último nombre de propiedad.
agregado el autor Rawling, fuente

1 Respuestas

Dentro de la última selección, u no es DailyUsageForYear su objeto de agrupamiento con el campo Key , así que intente cambiar su selección como este

.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 
                });

También en

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

Creo que necesitas x.ApplicationId en lugar de x.LicenceID

0
agregado
Esa fue la clave del problema gracias
agregado el autor user2903089, fuente