在此上下文中,仅支持原始类型或枚举类型。

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

一个可能的解决方案是将列表更改为集合或其他类型,毕竟我在其他地方正在使用Linq查询加载它,但签名会是什么?

2个回答

18

尝试这个更改,不在查询中使用 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。


好的!运行得很好,我本来想建议将List更改为其他类型的集合,但这很棒。 - Bill Software Engineer

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

问题已解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接