2012-03-09 18 views
0

ラムダ式でSumメソッドを使用して比較しようとしていますが、複数の比較に使用したいと考えています。これをどのように達成するのですか?私は "Let"と "SelectMany"を見ましたが、私は答えを見つけることができませんでした。以下は c#複数の比較に合計を使用したラムダ式

は、コードは次のようになります。

return _dbContext.All<Table>() 
      .Where(table => table.CurrentLevel <= salesCriteria.MaxTableLevel) 
      .Where(table => table.Leg 
          .Where(leg=> salesCriteria.StartDate <= leg.AddDate) 
          .Where(leg=> leg.AddDate <= salesCriteria.EndDate) 
          .Sum(leg => leg.Width) <= salesCriteria.MaxGoalAmount); 

あなたが見ることができるように、私は幅すべてが少なくなるまで追加一定の基準として脚を持っている特定の条件ですべてのテーブルを取得しようとしていますある値よりもまた、Sumが一定の最小値よりも大きいことを確認したいと思います。しかし、私はすぐにそれをやることができません。私は、リストを失います。だから私はここでそれをどのように達成するだろうか?だからここSelectは、クエリ式でletを使用するのと同じである

return _dbContext.All<Table>() 
     .Where(table => table.CurrentLevel <= salesCriteria.MaxTableLevel) 
     .Select(table => new { 
      table, 
      legWidth = table.Leg 
          .Where(leg=> salesCriteria.StartDate <= leg.AddDate) 
          .Where(leg=> leg.AddDate <= salesCriteria.EndDate) 
          .Sum(leg => leg.Width) 
     }) 
     .Where(x => x.legWidth <= salesCriteria.MaxGoalAmount && 
        x.legWidth >= salesCriteria.MinGoalAmount) 
     .Select(x => x.table); 

:私が欲しいのはのminValue < = .SUM()< = maxValueの

+0

他の基準を適用する前に、前もって定義した基準を満たす脚のセット、または脚の全体のセットに合計を適用しますか? –

+0

'let'はあなたを助けませんでしたか? – Gabe

答えて

1

であるあなたのような何かをしたいように聞こえます。クエリ式として

、これは次のようになります。

return from table in _dbContext.All<Table>() 
     where table.CurrentLevel <= salesCriteria.MaxTableLevel 
     let legWidth = table.Leg 
          .Where(leg=> salesCriteria.StartDate <= leg.AddDate) 
          .Where(leg=> leg.AddDate <= salesCriteria.EndDate) 
          .Sum(leg => leg.Width) 
     where legWidth <= salesCriteria.MaxGoalAmount && 
      legWidth >= salesCriteria.MinGoalAmount 
     select table; 
+0

freakin完璧! Jonに感謝します。 – Riz

0

letのパワーを取得するには、表現の構文を照会する方法チェイン構文から切り替える必要があります。このお試しください:

var goodTables = 
    from table in _dbContext.All<Table>() 
    where table.CurrentLevel <= salesCriteria.MaxTableLevel 
    let sumOfWidthOfGoodLegs = 
     table.Leg 
     .Where(leg=> salesCriteria.StartDate <= leg.AddDate) 
     .Where(leg=> leg.AddDate <= salesCriteria.EndDate) 
     .Sum(leg => leg.Width)  
    where sumOfWidthOfGoodLegs <= salesCriteria.MaxGoalAmount 
    // can insert another where on sumOfWidthOfGoodLegs here as required 
    select table; 

return goodTables.ToList(); 

を私はこれは唯一の良い足の幅の合計をチェックしていることに注意してください - 私は、これはあなたが望むものである確信していないが、それはあなたが現在やっていることです。

関連する問題