11

だから私はこのコードを持っています:

    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.

そこで、通常の Entity Framework Code First オブジェクトである shift を定義する場所を次に示します。

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

問題は、Linq クエリで Shift オブジェクトを使用していることだと思います。そして、「Shift」のリストに対して「Any」操作を行っています。

考えられる解決策の 1 つは、List を Collection などに変更することです。結局のところ、別の場所で linq クエリを使用してロードしていますが、署名は何でしょうか?

4

2 に答える 2

17

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 を使用して、クエリ プロバイダーにオブジェクトを渡さないようにするという考え方です。

于 2013-05-17T18:42:40.867 に答える