gpt4 book ai didi

c# - 林克异常 : Function can only be invoked from linq to entities

转载 作者:太空狗 更新时间:2023-10-29 21:04:18 24 4
gpt4 key购买 nike

我有一个 StudentReceipts 表,它将 ReceiptNo 存储为 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();

但是我得到以下异常

this function can only be invoked from linq to entities

我们将不胜感激任何帮助。

最佳答案

通过调用 .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 以便能够在内存中进行解析和排序。

关于c# - 林克异常 : Function can only be invoked from linq to entities,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36216647/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com