2013-05-17 59 views
9

所以我有這樣的代碼:只有基本類型或枚舉類型在這方面的支持

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

不幸的是,它拋出這個錯誤:

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

所以這裏是我定義的轉變,這只是一個正常的實體框架代碼第一個對象:

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

我想問題是,我使用Shift o在Linq查詢中查找。我正在對「Shift」列表執行「任意」操作。

一個可能的解決方案是將列表更改爲可能是集合或其他東西,畢竟,我在其他地方用linq查詢加載它,但簽名是什麼?

回答

14

嘗試這種變化並不在查詢中使用的Shift個集合:

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

這樣做是爲了避免將Shift對象的查詢提供,使用ID替代。

+0

是!工作得很好,我打算建議將List更改爲其他類型的集合,但這非常棒。 – Bill

相關問題