2013-05-17 12 views
9

così ho questo codice:tipi Solo primitive o tipi di enumerazione sono supportati in questo contesto

public int saleCount(List<Shift> shifts) { 
     var query = (
      from x in database.ItemSales 
      where shifts.Any(y => y.ID == x.shiftID) 
      select x.SalesCount 
     ); 
     return query.Sum(); 
    } 

Purtroppo, è gettando questo errore:

Unable to create a constant value of type 'Shift'. 
Only primitive types or enumeration types are supported in this context. 

ecco dove mi definisco turno, che è solo un normale Entity Framework Codice Primo oggetto:

[Table("Shifts")] 
public class Shift : MPropertyAsStringSettable { 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int ID { get; set; } 
    public int SiteID { get; set; } 
    public string ShiftID_In_POS { get; set; } 
    public DateTime ShiftDate { get; set; } 
} 

Credo che il problema è che sto usando Shift o bject in una query di Linq. E sto facendo un'operazione "Qualsiasi" su una lista di "Shift".

Una possibile soluzione è di modificare l'Elenco in una raccolta o qualcosa del genere, dopotutto, lo sto caricando con una query di linq da qualche altra parte, ma quale sarebbe la firma?

risposta

14

Prova questa modifica che non fa uso di un insieme di Shift s nella query:

public int saleCount(List<Shift> shifts) { 
    var shiftIds = shifts.Select(s => s.ID).ToList(); 
    var query = (
     from x in database.ItemSales 
     where shiftIds.Contains(x.shiftID) 
     select x.SalesCount 
    ); 
    return query.Sum(); 
} 

L'idea è quella di evitare di passare Shift oggetti per il provider di query, utilizzando gli ID invece.

+0

Sì! Ha funzionato bene, stavo per suggerire di cambiare la lista in qualche altro tipo di collezione, ma questo è fantastico. – Bill

Problemi correlati