Linq to SQL を使用して複数のテーブルをクエリする場合、匿名型の結果を返すと問題が発生する可能性があります。 Dogs テーブル (Name、Age、BreedId を含む) と Breeds テーブル (BreedId と BreedName を含む) があるシナリオを考えてみましょう。すべての犬を取得するのは簡単です:
<code class="language-csharp">public IQueryable<Dog> GetDogs() { var db = new DogDataContext(ConnectString); var result = from d in db.Dogs join b in db.Breeds on d.BreedId equals b.BreedId select d; return result; }</code>
ただし、匿名型を使用して対応する BreedName を持つ犬を返そうとすると、コンパイル エラーが発生します:
<code class="language-csharp">public IQueryable<Dog> GetDogsWithBreedNames() { var db = new DogDataContext(ConnectString); var result = from d in db.Dogs join b in db.Breeds on d.BreedId equals b.BreedId select new { Name = d.Name, BreedName = b.BreedName }; return result; }</code>
これは、Linq to SQL が Dog 型が返されることを期待しているにもかかわらず、クエリが匿名型を生成するためです。
この問題を克服するための 1 つの解決策は、目的の結果を表すカスタム クラスを作成することです。
<code class="language-csharp">public class DogWithBreed { public Dog Dog { get; set; } public string BreedName { get; set; } } public IQueryable<DogWithBreed> GetDogsWithBreedNames() { var db = new DogDataContext(ConnectString); var result = from d in db.Dogs join b in db.Breeds on d.BreedId equals b.BreedId select new DogWithBreed() { Dog = d, BreedName = b.BreedName }; return result; }</code>
このメソッドは、Dog と BreedName のプロパティを含む DogWithBreed クラスを作成します。次に、クエリは、必要なデータへのアクセスに使用できるこのカスタム クラスのインスタンスを選択します。
以上がコンピレーションエラーなしでLINQからSQLに参加したデータを返す方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。