2012-02-28 7 views
5

私にはわからない単純なLINQ問題があります。 私はテーブルUsersとテーブルEmployeesを持っています。 1人のユーザーが0人〜n人の従業員を持つことができます。EF 4.3のLINQクエリで "let"キーワードを使用する

私はこのような何かをしたいと思います:First()コールbecasueもちろん動作しません

var result = from u in context.users 
      where u.UsrId = 2 
      let e = u.Employees.First() 
      select new 
{ 
    UserId = u.UsrId, 
    FirstName = e.FirstName 
}; 

は違法です。 First()はselectの末尾に来るだけです。私はの使用が正しい許可すればわからない

var employee = from e. in context.Employees..... 

...そしてlet e = employee代わりにlet e = u.Employees().First()

を言う:もうまくいきませんでした何 はそうのような以前のクエリで従業員を選択することです。私はサブクエリのためだと思った。

コールの理由は、Employeesテーブルが各ユーザーに対して複数のエントリを持つべきではないということです。それはデザインのミスで、私は今それに対処しなければなりません。だから私は最初のものがほしい。

答えて

4
var result = from u in context.users 
let e = u.Employees.FirstOrDefault(x => x.bossId == u.UsrId) 
where u.UsrId = 2 
select new { UserId = u.UsrId, FirstName = e.FirstName }; 

テストなしでちょうどtipp。

+0

こんにちは。問題の上位LINQクエリで何が間違っているのかを理解する手助けをしてください。あなたの質問とそれは私と同じように見えました。 – UfukSURMEN

1

LINQの照会文の途中で、SQL文をSQLに変換するときに、実際にはFirstを構成する方法がない場合を除き、最初はエラーをスローすることができます。 FirstOrDefaultはTop(1)に変換できますが、これはSQLへの変換方法です。これは、SQLの翻訳可能な文の真ん中で最初のものを使用することは実際には有効ではありませんが、私はゼロ結果が例外の投稿後のクエリの実行に変換できるので、最後の文としてこれを許可していると思います。

関連する問題