データの形式が正しくない場合 (先頭のスペース、英字)、文字列による並べ替えは失敗する可能性があります。データをメモリに入れる余裕がある場合は、これで抜け穴がなくなるはずです。
var result = db.LengthDatas
.ToList()
.Select(c =>
{
decimal d;
Decimal.TryParse(c.AbsoluteCounter, out d);
return d;
})
.Max();
ただし、データの品質に自信がある場合は、そのまま使用してください
var result1 = db.LengthDatas.Max(c => c.AbsoluteCounter);
補遺
メモリ内ではなくサーバー上で文字列を 10 進数に変換することについての議論を締めくくるために、@MarcinJuraszek が参照している上記の手法を試しました。
Code First アプリでテストしていますが、プロジェクトに ADO.Net Entity Data Model を追加して EDMX を追加しました。整理しなければならないことがいくつかありますが、基本的には次のタイプのクエリが機能します。
var result = db.LengthDatas.Max(c => EdmxExtensions.DecimalParse(c.AbsoluteCounter));
Linq to Entities によって生成される SQL は次のとおりです。
SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
MAX( CAST( [Extent1].[AbsoluteCounter] AS decimal(12,2))) AS [A1]
FROM [dbo].[LengthDatas] AS [Extent1]
) AS [GroupBy1]
ただし、これは c# Decimal.TryParse で得られるような堅牢な変換ではないことに注意してください。不正な文字列で例外がスローされます。