5

理解できない単純なLINQの問題があります。私はテーブルUsersとテーブルを持っていますEmployees1 人のユーザーは 0...n 人の従業員を持つことができます。

私はこのようなことをしたいと思います:

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()呼び出しが違法であるため、もちろん機能しません。First() は a の最後にのみ来ることができselectます。また、次のように前のクエリで従業員を選択してもうまくいきませんでした。

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

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

let の使用が正しいかどうかはわかりません。サブクエリ用だと思いました。

この呼び出しの理由はFirst()、Employees テーブルに各ユーザーに対して複数のエントリが含まれないようにするためです。それは設計上のミスであり、今対処しなければなりません。だから私は最初のものだけが欲しい。

4

2 に答える 2

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 }; 

テストなしの単なるチップ。

于 2012-02-28T10:17:03.133 に答える
1

First は、LINQ クエリ可能なステートメントの途中を除いて使用できます。そのステートメントを SQL に変換する場合、その動作はエラーをスローするため、実際には First を構成する方法はありません。ただし、FirstOrDefault は Top(1) に変換でき、SQL に変換されます。これは、SQL変換可能なステートメントの途中で最初に使用することは実際には有効ではないことを意味しますが、ゼロの結果はクエリ実行後の例外に変換できるため、最後のステートメントとしてこれを許可したと思います。

于 2012-02-28T10:17:51.527 に答える