0

SQL では、次のように実行されます。

SELECT * FROM Student
WHERE SchoolId IN
    (SELECT id FROM School WHERE Name LIKE '%elementary%')

これを LINQ で実装するにはどうすればよいですか? 私は次のことを試しました:

var list = context.Students.Where(x => context.Schools.Where(r => r.Name.Contains("elementary").Select(r => r.Id).Contains(x.SchoolId))

残念ながら、それは私が望むものを私に与えていません...

Id最初にテーブルからすべての sを取得できることはわかっていますSchoolが、パフォーマンスに大きな負担がかかると思います。できれば、LINQ to SQL ですべてを処理したいと思います。動的にする必要があり、現在LINQが最適なソリューションであるため、バニラSQLを使用してこれを行うことはできません。

上記のコードはすべて説明用です。私がやっていることは少し異なります(しかし、多かれ少なかれ同じです)。これについては本当に助けが必要です。さらに情報が必要な場合は、お気軽にお問い合わせください。

編集:私の悪い、私はフィールドを逃した。それは機能しますが、そのフィールドが欠落していたため、結果が表示されませんでした...申し訳ありません...

4

2 に答える 2

2

これを試して:

var result = from st in context.Student
             from sc in context.Schools
             where sc.Name.Contains("elementary") && sc.SchoolId == st.SchoolId
             select st;

私は構文が少しぼんやりしています、許してください。しかし、これは正しい方向を示しているはずです。

于 2012-11-28T14:19:13.450 に答える
1

このようなものがうまくいくはずです。Contains の最初の使用は、文字列オブジェクトに対して、文字列に部分文字列 "elementary" が含まれているかどうかを確認することです。Contains の 2 番目の使用はリストであり、最初の結果リストに SchoolId が含まれているかどうかを確認します。

var sublist = from s in context.Schools
              where s.Name.Contains("elementary")
              select id;

var list = from s in context.Students
           where sublist.Contains(s.SchoolId)
           select s;
于 2012-11-28T14:26:50.257 に答える