2017-09-04 24 views
0

これは私が望むように動作させることができましたが、クエリ構文に対してメソッド構文を優先します。このlinqをクエリ構文からメソッド構文に変換する方法

これはメソッド構文でどのように記述できますか?

var data = (from stat in this._applicationDbContext.Stats 
      where stat.SupId == this.GetCurrentSupId() && stat.StatType == 1 
      orderby stat.WeekEnding descending 
      group stat by stat.WeekEnding into statGroup 
      select new WeeklyStat 
         { 
          WeekEnding = statGroup.First().WeekEnding, 
          Amount = statGroup.Sum(a => a.StatValue) 
         }).Take(6); 

これは、元のSQLです:

SELECT TOP (6) 
    SUM([stat_value]) AS lessons_graded, 
    CONVERT(DATE, [weekend]) weekending 
FROM 
    [dbo].[Stats] 
WHERE 
    stat_type = 1 AND sup_id = 1113 
GROUP BY 
    CONVERT(DATE, [weekend]) 
ORDER BY 
    CONVERT(DATE, [weekend]) DESC 
+5

別の構文や言語で同等のコードを書くことは、まったく同じものではないので、この質問を議論の対象外とすることにしました。壊れたコードを修正するのに役立ちます。しかし、コード変換が必要な場合は、別の場所で試してみる必要があります。 –

+0

@SamAxe:OPが明確ではない部分が明確に述べられていれば、話題になるでしょうか? – Stefan

+0

@Stefan:そうは思いません。機能するコードを説明することは、SOが*想定する*ものではありません。明らかに、その評価にはいくらか反対です。 –

答えて

1

この演習ではありませんが、参加していたクエリのために非常に機械的です。 - 今、あなたは、ラムダのためstatGroupを使用して起動

var data = this._applicationDbContext.Stats 
    .Where(stat => stat.SupId == this.GetCurrentSupId() && stat.StatType == 1) 
    .OrderByDescending(stat => stat.WeekEnding) 
    .GroupBy(stat => stat.WeekEnding) 
    .Select(statGroup => new WeeklyStat { 
     WeekEnding = statGroup.First().WeekEnding, 
     Amount = statGroup.Sum(a => a.StatValue) 
    }).Take(6); 

同じことがGroupBy後に起こる:

基本的なルールは次のように、from stat句からstat変数を抽出し、それぞれ別々の句にそれを固執することですパラメータ。

これは1つの可能な命名方式であることに注意してください。ラムダのパラメータ名は、ラムダにローカルなので、あなたはWhereOrderBy、およびGroupByの内側に別の変数名を使用することができます。

.Where(x => x.SupId == this.GetCurrentSupId() && x.StatType == 1) 
.OrderByDescending(y => y.WeekEnding) 
.GroupBy(z => z.WeekEnding) 

を明らかに、一貫性のある命名規則を使用して大幅に読みやすさを向上させます。

+0

ありがとうございました。上記と似たようにしてみましたが、順不同でした。 –

関連する問題