2013-05-17 8 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キーを押しながらShiftキーを押しながらLinqクエリで処理されます。そして私は "Shift"のリストで "Any"操作をしています。

可能な解決策の1つは、リストを多分Collectionなどに変更することです。その後、linqクエリで読み込んでいますが、その署名は何ですか?アイデアは、代わりにIDを使用して、クエリプロバイダに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(); 
} 

答えて

14

は、クエリでShiftのコレクションを使用していない、この変更をお試しください。

+0

うまくいきましたが、リストを他のタイプのコレクションに変更するよう提案しましたが、これは素晴らしいことです。 – Bill