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.

所以这里是我定义 shift 的地方,它只是一个普通的 Entity Framework Code First 对象:

[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”操作。

一种可能的解决方案是将 List 更改为 Collection 或其他东西,毕竟,我在其他地方使用 linq 查询加载它,但签名会是什么?

4

2 回答 2

17

试试这个在查询中不使用Shifts 集合的更改:

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 回答
0

我收到此错误是因为

bool isPresent = entities.VaccinationRecords.Any(id => id.PersonId.equals(studetails.StuId));

personID 和 StuId 是 INT 类型,但我使用 .equals 来比较这两个值。

然后我做到了;

bool isPresent = entities.VaccinationRecords.Any(id => id.PersonId == studetails.StuId);

问题解决了。

于 2021-08-06T06:13:06.520 回答