在此上下文中只支持基本类型或枚举类型
本文关键字:类型 枚举 支持 上下文 | 更新日期: 2023-09-27 18:14:04
所以我有这样的代码:
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的地方,它只是一个普通的实体框架代码优先对象:
[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查询,但签名是什么?
尝试在查询中不使用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来代替。
我得到这个错误,因为
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);
解决问题。