2017-12-12 11 views
0

私はC#プロジェクトでLINQクエリを作成していますが、コンパイラは計算フィールド 'Enabled'が嫌いです。C#LINQ選択句の計算フィールドとサブクエリを使用したクエリ

タイプが異なるため、(a.Qtty * a.Price)とサブクエリの比較はできません。最初のものはdouble型で、2つ目は匿名型です。

私はあらゆる種類のキャストを試しましたが、動作させることはできませんでした。

私はwhere節を削除してより簡単になり、optionTypesは列挙型です。

計算された値とサブクエリの比較を削除しても問題ありません。

助けが必要ですか?匿名型を作成しますが、単に値を選択していない、

(a.Qtty * a.Price) 
<= 
_ctx.Items.Where().Select(b => new { b.Qtty }).FirstOrDefault() 

は、この問題を解決するには:

dynamic fromOthers = _ctx.Orders 
    .Where(/* conditions */) 
    .Select(a => new 
    { 
     Id = a.Id, 
     Option = a.OpType == OptionTypes.Buy ? "Buy" : "Sell", 
     Enabled = 
     (a.OpType == OptionTypes.Buy 
      ? (a.Qtty * a.Price) <= 
      _ctx.Items 
       .Where(/* conditions */) 
       .Select(b => new 
       { 
        b.Qtty 
       }) 
       .FirstOrDefault() ? "Yes" : "No" 
      : "TBD" 
     ) 
     }) 
    .ToList(); 
+0

「a」の定義が表示されることがあります。 –

+0

申し訳ありませんあなたの質問を理解できませんでした。 –

+1

'new {b.Qtty}'と数値を比較しています。匿名型にラップせずに 'b.Qtty'を選択するだけです。 –

答えて

0

あなたは匿名型に(私は decimal推測)の数値を比較します
(a.Qtty * a.Price) 
<= 
_ctx.Items.Where().Select(b => b.Qtty).FirstOrDefault() 
関連する問題