您可以ISNUMERIC
通过向 DataContext 的部分类添加方法来使用该函数。这类似于使用 UDF。
在 DataContext 的部分类中添加:
partial class MyDataContext
{
[Function(Name = "ISNUMERIC", IsComposable = true)]
public int IsNumeric(string input)
{
throw new NotImplementedException(); // this won't get called
}
}
然后您的代码将以这种方式使用它:
var query = dc.TableName
.Select(p => new { p.Col, ReplacedText = p.Col.Replace("EU", "") })
.Where(p => SqlMethods.Like(p.Col, "EU%")
&& dc.IsNumeric(p.ReplacedText) == 1)
.OrderByDescending(p => p.ReplacedText)
.First()
.Col;
Console.WriteLine(query);
或者你可以使用 MAX:
var query = dc.TableName
.Select(p => new { p.Col, ReplacedText = p.Col.Replace("EU", "") })
.Where(p => SqlMethods.Like(p.Col, "EU%")
&& dc.IsNumeric(p.ReplacedText) == 1);
var result = query.Where(p => p.ReplacedText == query.Max(p => p.ReplacedText))
.First()
.Col;
Console.WriteLine("Max: {0}, Result: {1}", max, result);
根据您的最终目标,可能会在max
变量处停止并在其前面加上“EU”文本,以避免获取列名的第二个查询。
编辑:正如评论中提到的,这种方法的缺点是排序是在文本而不是数值上完成的,并且目前没有Int32.Parse
SQL 的翻译。