我有一个充满产品序列号的表,数据类型是nvachar,我有1001,1002,1003,abc001,efg002,1004,def222等条目。我必须返回列中有效数字的max value
,在这种情况下输出应为1004.
此SQL查询正在运行
select top 1
cast(SerialNo as integer)
from [InvSerialItemDetails]
where isNumeric(SerialNo) = 1
Order by cast(SerialNo as integer) desc
我必须在LINQ
中做同样的事情。但LINQ中没有isNumeric函数。如何在VB语言的LINQ
中获得相同的输出
答案 0 :(得分:0)
如果您使用的是Linq to Entities
,那么 是Linq中隐藏的IsNumeric
函数。
答案 1 :(得分:0)
她是VB.Net的一个例子。我只使用了一个字符串列表,LINQ表达式将获取List中的最高数字。
Dim nvarcharNubers As List(Of String) = New List(Of String)
nvarcharNubers.Add("abc1007")
nvarcharNubers.Add("1002")
nvarcharNubers.Add("1003")
nvarcharNubers.Add("1004")
nvarcharNubers.Add("2000fg")
nvarcharNubers.Add("999")
Dim TopNumberOnly = From i In nvarcharNubers
Where IsNumeric(i)
Select i = Integer.Parse(i)
Order By i Descending
Take 1
或者如果您想使用Lambda语句:
Dim TopNumberOnly = nvarcharNubers _
.Where(Function(w) IsNumeric(w)) _
.Select(Function(s) Integer.Parse(s)) _
.OrderByDescending(Function(o) o) _
.Take(1)
答案 2 :(得分:-1)
如果您确定您的数据库字段仅包含数字值,则始终可以使用 max 表示nvarchar字段。见下面的例子:
var serials = new List<SerialObject>();
// Add AlphaNumeric value to the list
serials.Add(new SerialObject()
{
Id = "1",
Serial = "aa10a1"
});
// Add AlphaNumeric value to the list
serials.Add(new SerialObject()
{
Id = "2",
Serial = "cc11da"
});
// Add Numeric values to the list
for (int i = 0; i < 5; i++)
{
serials.Add(new SerialObject()
{
Id = i.ToString(),
Serial = (1000 + i).ToString()
});
}
// Fetch max numeric from list using regular expression
var regex = new Regex("^[0-9]*$");
var numbers = serials.Where(a => regex.IsMatch(a.Serial)).Select(a => a.Serial).ToList();
var max = numbers.Max(a => a);
串行对象类
public class SerialObject
{
public string Id { get; set; }
public string Serial { get; set; }
}
}