选择Max,但仅限于具有LINQ to Entities的数值

Cod*_*ody 3 c# sql linq linq-to-entities entity-framework

我试图sys_idsys_id列是varchar类型的表中选择最大值.有些行包含文本,但我只关心数值.

我尝试了以下一些代码,但它们不起作用 - LINQ to Entities似乎不支持此操作.

public string GetSysID()
{
    using (var context = new DbEntities())
    {
        int i;
   //     var intQuery = context.myTable.Where(t => int.TryParse(t.sys_id, out i)).Max();

        int intQuery = Convert.ToInt32(context.myTable.Where(p => IsNumber(p.sys_id)).Max(p => p.sys_id));

        //return context.drawings.Max(p => p.sys_id);
        return intQuery.ToString();
    }
}

public static bool IsNumber(string value)
{
    int n;
    return int.TryParse(value, out n);
}
Run Code Online (Sandbox Code Playgroud)

有没有办法使用LINQ to Entities做到这一点?

Sai*_*ito 6

使用SqlFunctions.IsNumeric和Cast

iQueryableSource
.Where(x => SqlFunctions.IsNumeric(x.Number + ".0e0") == 1) // see explanation about .0e0 below
.Select(x => x.Number)
.Cast<int>()
.Max()
Run Code Online (Sandbox Code Playgroud)

UPDATE

您可以发现与字符串中的点或货币符号相关但仍然存在的问题IsNumeric == 1.因为你只想要整数,你应该.0e0像这样添加一个字符串SqlFunctions.IsNumeric(x.Number + ".0e0") == 1

有关详细信息,请参阅此问题此博客文章