Linqexception:只能从linq到实体调用函数
我有一个StudentReceipts
表, ReceiptNo
存储为string(001,002,003,..,099,..)
。
我想获取最后的receiptno详细信息,以便为下一个事务增加receiptno。
这就是我的尝试
var _lastGeneratedRecDetails = _db.StudentReceipts .AsEnumerable() .Where(r => r.Status == true && EntityFunctions.TruncateTime(r.DueDate.Value) >= _startDate.Date && EntityFunctions.TruncateTime(r.DueDate.Value) Int32.Parse(x.ReceiptNo)) .FirstOrDefault();
但是我得到以下例外
此函数只能从linq调用到实体
任何帮助将受到高度赞赏。
通过调用.AsEnumerable()
您将从Linq-To-Entities转到Linq-To-Object。 通过调用它,您还可以过滤内存中的所有结果,因此每次执行该查询时都会从数据库中提取整个StudentReceipts
表,因为它通过.AsEnumerable()
方法执行。 一般规则是尝试尽可能多地在数据库端执行:
var _lastGeneratedRecDetails = _db.StudentReceipts.Where(r => r.Status == true && EntityFunctions.TruncateTime(r.DueDate.Value) >= _startDate.Date && EntityFunctions.TruncateTime(r.DueDate.Value) <= _endDate.Date) .AsEnumerable() .OrderByDescending(x => Int32.Parse(x.ReceiptNo)) .FirstOrDefault();
如果你这样做,你将过滤数据库中的所有内容并获取过滤结果。 我不知道x.ReceiptNo
是什么类型,但Linq-To-Entities中不允许调用Int.Parse
。 您可以先过滤,然后调用AsEnumerable
,以便能够在内存中进行解析和排序。