ksg*_*ksg 7 c# linq entity-framework asp.net-mvc-4
我有一个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) <= _endDate.Date)
.OrderByDescending(x => Int32.Parse(x.ReceiptNo))
.FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
但是我得到以下例外
此函数只能从linq调用到实体
任何帮助将受到高度赞赏.
Ale*_*rck 11
通过调用.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();
Run Code Online (Sandbox Code Playgroud)
如果你这样做,你将过滤数据库中的所有内容并获取过滤后的结果.我不知道是什么类型x.ReceiptNo
,但Int.Parse
在Linq-To-Entities中不允许调用.您可以先过滤然后调用AsEnumerable
,以便能够在内存中进行解析和排序.