LINQ to SQL クエリで匿名型を返すメソッド
LINQ to SQL を使用して複数のテーブルを操作する場合、匿名型を返すと問題が発生する可能性があります。次の例を考えてみましょう:
元のメソッド:
<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>
このメソッドはすべての犬の情報を正常に取得します。ただし、匿名タイプを使用して犬とその品種名を取得しようとすると、次のようになります。
<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>コンパイラは匿名型ではなく Dog 型が返されることを期待しているため、エラーが発生します。
代替: カスタム クラス
解決策の 1 つは、DogWithBreed のようなカスタム クラスを作成することです。
<code class="language-csharp">public class DogWithBreed { public Dog Dog { get; set; } public string BreedName { get; set; } }</code>その後、コードを次のように変更できます:
<code class="language-csharp">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>このアプローチは、追加のコーディング作業が必要になりますが、タイプセーフで再利用可能なソリューションを提供します。 カスタム クラスを選択すると、匿名型によって引き起こされる型の不一致の問題を回避し、コードの保守性と可読性を向上させることができます。
以上がLINQ から SQL クエリに匿名型を返す方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。