如何在实体框架中获取数字字符串列的最大值

a4a*_*hiq 4 c# sql linq entity-framework max

我这里有问题。我试图获取 sql 字段的最大值,

LastInvoiceNo = Convert.ToInt64(dbContext.InvoiceMaster.Max(e => e.InvoiceNo));
Run Code Online (Sandbox Code Playgroud)

但它给了我错误的值,因为“InvoiceNo”的列类型是 varchar。所以我尝试将其转换为 Int64 作为

LastInvoiceNo = dbContext.InvoiceMaster.Max(e =>Convert.ToInt64(e.InvoiceNo));
Run Code Online (Sandbox Code Playgroud)

LastInvoiceNo = dbContext.InvoiceMaster.Select(e => Int64.Parse(e.InvoiceNo)).Max();
Run Code Online (Sandbox Code Playgroud)

但它抛出了一个异常

LINQ to Entities 无法识别“Int64 Parse(System.String)”方法,并且该方法无法转换为存储表达式。

Luc*_*rin 5

您收到的错误是因为 EF 试图将您的 linq 查询转换为实际的 SQL 语句,但它不能。

您可以做的是通过强制执行查询将数据带到本地,然后您将能够转换为 Int64 并检查 Max。

像这样的东西:

LastInvoiceNo = dbContext.InvoiceMaster.ToList().Max(e => Convert.ToInt64(e.InvoiceNo));
Run Code Online (Sandbox Code Playgroud)

如果该表中有数百万行,则不确定这是否是最好的选择。

干杯