2016-10-12 3 views
-1

の時間を表す3つの数字の合計(10.30,1.45 ...)のような使用時間の値を持つ列があります。 合計の時間を取得するためにそれらの数値を合計します。 例:だから、私の最終的なlinqクエリまたはC#

値11.11、 0.50、0.59

合計時間11分 (11 + 50 + 59)の和を費やし= 2時間120分=

出力は11 + 2でなければなりません=私は11.11 + 0.50 + 0.59 = iの時間形式として見なさとして間違っている12.2を取得しています13.00時間

が、私のC#のクエリで。

数字を分割せずに13.00時間を得る方法を教えてください。

私が試した:

私に12.2を与えたが、私は時間としてそれを考えられて私は13.00を望んれ
db.myTable.Where(t => t.is_deleted == false).Sum(t => t.time_spent) 

を。

EDIT:

私は

List<string> hoursTemp1 = Model.tblName.Where(t => t.is_deleted == false).Select(p => p.time_spent.ToString()).ToList(); 
    var total_effort_hr = new TimeSpan(hoursTemp1.Sum(x => TimeSpan.ParseExact(x, "h\\.mm", System.Globalization.CultureInfo.InvariantCulture).Ticks)).ToString(@"hh\:mm"); 

を使用しかし、今、私はそう誰も私を助けてくださいすることができます60

より大きい24分値、その後時間値のためOverflowExceptionががグレーター取得していますこのエラーを解決して適切な結果を得る方法を教えてください。 すべてのヘルプは評価されます。

+0

あなたの値に単位が何か間違っていると思います。 11.11と0.50の違いは何分ですか? – Badiparmagi

+0

この種類のものにタイムパンプタイプを使用してはいけませんか? – Netferret

+0

正しい答えがそれに依存するため、使用しているORMと実際の値のタイプを指定してください。 –

答えて

5
 var times = new string[] { "11.11", "0.50", "0.59" }; 
     var totalTime = new TimeSpan(times.Sum(x => TimeSpan.ParseExact(x, "h\\.mm", CultureInfo.InvariantCulture).Ticks)); 
     Console.WriteLine(totalTime); //13:00:00 
+0

ありがとうございました。これは本当に私を助けます。私が望む完璧なソリューション。 –

1
public decimal GetHours(IEnumerable<decimal> args) 
{ 
    return args.Sum(x=> Math.Truncate(x) + (x-Math.Truncate(x))*100/60); 
} 

または1つのTRUNCATEと:

public decimal GetHours(IEnumerable<decimal> args) 
{ 
    return args.Sum(x=> (5*x-2*Math.Truncate(x))/3); 
} 

しかし、真剣に、私はそのような日時処理のために手をカットします。ほぼすべてのデータベースには、日付、時間、またはその両方を表す型があります。なぜこのような駄目を避けるためにそれらを使用しないのですか?

+0

私たちのデータベースには、このタイプの値を持つ数千のレコードがあり、アプリケーションのどこにでもデータ型を変更することはできません。 –

関連する問題