我有一个StudentReceipts
存储的表ReceiptNo
as string(001,002,003,..,099,..)
.
我想要获取最后一张收据的详细信息,以便增加下一笔交易的收据编号。
这是我尝试过的
var _lastGeneratedRecDetails = _db.StudentReceipts
.AsEnumerable()
.Where(r => r.Status == true
&& EntityFunctions.TruncateTime(r.DueDate.Value) >= _startDate.Date
&& EntityFunctions.TruncateTime(r.DueDate.Value) <= _endDate.Date)
.OrderByDescending(x => Int32.Parse(x.ReceiptNo))
.FirstOrDefault();
但我收到以下异常
该函数只能从 linq toEntity 调用
任何帮助将不胜感激。
通过致电.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
虽然是,但是打电话Int.Parse
Linq-To-Entities 中不允许这样做。可以先过滤然后调用AsEnumerable
能够在内存中进行解析和排序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)