2009-04-18 17 views
0

im linqをSQLに使用 私はMissionエンティティを持っています。これには割り当てのコレクションが含まれています。私はミッションごとのすべての割り当ての総継続時間を問い合わせるようになったと言うことができます。この例外を理解しないでください

と私は次のクエリを書いている:

return db.Missions.Select(m => new MissionNameDays() 
    { 
     Name = m.MissionName, 
     Days = m.Assignments.Sum(a => a.Duration()) 
    }); 

期間は、単純にこのコードを実行すると、私に次の例外を与える

public partial class Assignment 
{ 
    public int Duration() 
    { 
     return 1; 
    } 
} 

(それをシンプルに保つ)のように定義されます

サブクエリを選択すると、選択リスト内に指定できるのは1つの式だけです( )。はEXISTSで導入されていません。
説明 現在のWeb要求の実行中に未処理の例外 が発生しました。 エラーの詳細と のコードの詳細については、 スタックトレースを確認してください。

例外の詳細: System.Data.SqlClient.SqlException:サブクエリ がEXISTSで導入されていない場合 つだけの式が選択リストに を指定することができます。

私は、クエリから)(私は期間を省略した場合ことに気付きました(別名

Days = m.Assignments.Sum(a => 1) 

それがこの原因について任意のアイデア?

答えて

0

Durationプロパティ
OKの作品は、表のプロパティではないので、SQL文では表現できません。Assignmentsのメソッドであるため、式パーサーは有効なSQL式に正しく変換できません。計算してみてください。 Select式のDurationを計算するために使用するのと同じ式です。

return db.Missions.Select(m => new MissionNameDays() 
    { 
     Name = m.MissionName, 
     Days = m.Assignments.Sum(a => a.LengthInMinutes/1440) 
    }); 

代わりに、非柱状のプロパティ/メソッドで動作しますselectを使用してLINQToObjectsを行い、その後、クエリを確定することができます。あなたがこのクエリでミッションをフィルタリングしていないので、私はこの方法で行くと思います。

return db.Missions.ToList().Select(m => new MissionNameDays() 
    { 
     Name = m.MissionName, 
     Days = m.Assignments.Sum(a => a.Duration()) 
    }); 
関連する問題