怎么得到最大的数字?

时间:2013-05-03 04:36:03

标签: c# .net linq

我正在尝试使用以下代码从我的数据库中的字段中获取最大数字:

var bb=(from c in Office_TBLs select c.CodeNumber).Max();

当我运行查询时,我会收到结果" 999"这是错误的,因为数据库中的最大数字是1601.数据库中的数据类型是Nvarchar吗?

如何修复我的代码以获得正确的最大数量。

4 个答案:

答案 0 :(得分:12)

"999" > "1601"作为字符串比较 - 所以要获得结果,您需要将字符串值转换为数字。

最简单的方法是使用.Select(s => int.Parse(s)).Max())(或.Max(s => int.Parse(s)))代替.Max(),最后使用常规字符串比较。

请注意,根据数据的来源,可能有更好的方法来获取整数结果(包括更改数据库中的字段类型)。在查询上使用.Select很可能强制查询从DB返回所有行,而不是在内存中计算Max。

答案 1 :(得分:3)

由于您使用的是LINQ to SQL,因此您应该使用Convert.ToInt32将字符串转换为数字,因此您的查询将是:

var bb =(from c in Office_TBLs select Convert.ToInt32(c.CodeNumber)).Max();

请参阅:Standard Query Operator Translation

  

仅在投影中支持C#强制转换。使用的演员表   其他地方没有翻译而被忽略。 除了SQL   函数名,SQL实际上只执行相当于常见的   语言运行时(CLR)转换。也就是说,SQL可以改变它的值   一种到另一种。因为那里没有等效的CLR演员   不是重新解释与另一个相同位的概念   类型。这就是C#cast仅在本地工作的原因。它不是远程的。

答案 2 :(得分:0)

试试这个

var bb=(from c in Office_TBLs select (e => e.CodeNumber).Max())

答案 3 :(得分:0)

如果您使用NVarChar,那么您要求按字母顺序排序值。 “999”在“1601”之后出现,就像“ZZZ”在“HUGS”之后出现一样。

如果列应该只包含数值,那么最好的解决方法是将数据类型更改为更合适的选择。