1

成績の平均を使用する LINQ ステートメントがありますが、問題は時々

grade は 3.777777 のように表示されますが、3.7 にしたいのですが、linq ステートメントでどのように切り捨てることができますか?

これは私のLINQステートメントです:

public List<CoreValueAndAverageGrade> GetAverageGradeForAllCoreValues2()
{
    var answers = db.GoalCardQuestionAnswer
        .Where(answer => answer.Grade.HasValue
            && (answer.SelectedQuestion.Question is CoreValueQuestion
                && (answer.SelectedQuestion.Question as CoreValueQuestion).SubjectType.Ignored_Statistic == false));
    var groupedByCoreValue = answers.GroupBy(answer => (answer.SelectedQuestion.Question as CoreValueQuestion).CoreValue);

    return groupedByCoreValue
        .OrderBy(group => group.Key.Name)
        .Select(group => new CoreValueAndAverageGrade
        {
            CoreValue = group.Key,
            AverageGrade = group.Any() ? group.Average(answer => answer.Grade.Value) : 0
        }).ToList();

アクションメソッドのコントローラー内でそれを行うことは可能ですか?

var averageGrades = OfficeStatisticRepository.GetAverageGradeForAllCoreValues2();

var dataItems = (averageGrades.Select(averageGrade => averageGrade.AverageGrade).ToArray()); // here
4

1 に答える 1

2

ここには 3 つのオプションがあります。

1) orMath.Truncateを使用するのと同じように、Linq クエリを丸めます。Linq->SQL 変換の一部として。AverageAggregate

...
... ? group.Average(answer => Math.Truncate(10 * answer.Grade.Value) / 10) : 0M
...

ドキュメントでmethodについて言及されているのはSystem.Math.Truncate(decimal, int)おかしいですが、実際には存在しません...幸いなことに、乗算して丸めることができます。これは Decimals では問題なく機能しますが、等級が Double の場合、除算のために新しい丸めの問題が発生する可能性があります。

2) decimal.Round を使用してToListを呼び出した後、Linq クエリの値を丸めます (バンカーの丸めを使用したくない等級については、必ず正しい丸め方向を選択してください。

 var groupedByCureValue = answers.GroupBy....ToList();
 /* then in the next query use Math.Truncate or Math.Round as you 
    would otherwise, you can now use MidPointRounding if you want to 
    no sql translation is done as this is all executed in memory, 
    so you're free to use any framework method available to you. */

3) 値を変更せずに、値の表示に使用しF1ているテキストボックス/ラベル/バインディングなどの表示形式を使用して、丸められた値のみを UI に表示します。これをどのように設定するかは、使用している表示フレームワークによって異なります。グループに 3.77 と 3.76 がある場合、これは値を結合しません。

于 2012-05-21T09:39:21.207 に答える