我有两个实体模型 -
public SalesPerson
{
int PersonId; int DistributionHouseId;
{
public SalesRecord
{
int RecordId; int PersonId; datetime SalesDate;
{
var persons = Db.SalesPersons.Where(m => m.DistributionHouseId == 1).ToList();
var salesRecords = Db.SalesRecords.Where(m =>
persons.Any(x => x.PersonId==m.PersonId)
&& DbFunctions.TruncateTime(m.SalesDate) == date)
.ToList();
它给了我例外Only primitive types or enumeration types are supported in this context.
答案 0 :(得分:0)
最可能的原因是这种情况:
persons.Any(x => x.PersonId==m.PersonId)
您可以按如下方式重做:
var personIds = Db.SalesPersons
.Where(m => m.DistributionHouseId == 1)
.Select(p => PersonId)
.ToList();
然后条件的相应部分将成为
personIds.Contains(m.PersonId)
现在是一个使用基本类型集合的条件。
答案 1 :(得分:0)
我认为问题在于日期比较,有时LINQ可以正确翻译DBFunction。
试试这个:
var salesRecords = Db.SalesRecords.Where(m =>
persons.Any(x => x.PersonId == m.PersonId))
.ToList()
.where(m=> m.SalesDate.Date == date);
当使用.ToList方法时,它将数据从SQL加载到内存中,在那里你可以比较日期