ホームページ >バックエンド開発 >C++ >LINQ から SQL クエリに匿名型を返す方法は?

LINQ から SQL クエリに匿名型を返す方法は?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-28 00:16:09788ブラウズ

How to Return Anonymous Types from LINQ to SQL Queries?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。