如何在Entity Framework中获取字符串数字列的最大值

时间:2014-02-19 11:12:38

标签: c# sql linq entity-framework max

我这里有问题。我试图将sql字段的最大值设为,

LastInvoiceNo = Convert.ToInt64(dbContext.InvoiceMaster.Max(e => e.InvoiceNo));

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

LastInvoiceNo = dbContext.InvoiceMaster.Max(e =>Convert.ToInt64(e.InvoiceNo));

LastInvoiceNo = dbContext.InvoiceMaster.Select(e => Int64.Parse(e.InvoiceNo)).Max();

但它引发了一个例外

  

LINQ to Entities无法识别方法'Int64 Parse(System.String)'方法,并且此方法无法转换为商店表达式。

2 个答案:

答案 0 :(得分:3)

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

您可以做的是通过强制查询执行来本地传输数据,然后您就可以转换为Int64并检查最大值。

这样的事情:

LastInvoiceNo = dbContext.InvoiceMaster.ToList().Max(e => Convert.ToInt64(e.InvoiceNo));

如果您在该表中有数百万行,那么不确定这是否是最好的事情。

干杯

答案 1 :(得分:0)

如果您正在使用MSSQL,您可以尝试使用专门设计用于LINQ查询的SqlFunctions静态类,并将其转换为本机服务器功能。看起来有点奇怪,但以下可能有用:

    dbContext.InvoiceMaster.Max(e =>SqlFunctions.Replicate("0", 16-e.InvoiceNo.Length) + e.InvoiceNo);

我在这里要做的是模拟在SqlFunctions中不可用的PadLeft函数,因此让所有字符串按长度标准化,您可以选择最大值然后将其转换为实际数字。