1

まず、タイトルが誤解を招く場合は申し訳ありませんが、必要に応じて自由に変更してください。

C#asp.net MVC3WebアプリケーションでLINQtoSQLを使用していますが、機能の1つは、「ユーザー」のコレクションをクエリすることです。データを使用する前に、フィルタリング、並べ替え、およびページングが適用されます。この部分はすべて優れています。この段階で1つのSQLクエリのみが実行されるように構成されています(これはLINQに相当します)。

ただし、私が持っているのは、各「ユーザー」には、ユーザーがそれぞれ1つまたは複数持つことができる、いくつかの関連付けられたテーブル(つまり、アドレス、電子メール、番号)があるということです。ここで、関数の目的で、関連する各テーブル(つまり、「プライマリ」レコード)の最初のエントリを収集する必要があります。私がこれをコーディングした方法は、「フィルタリング」部分で見つかったレコードごとに、各プライマリ詳細レコードをプルするための個別のクエリがあるということです。

この時点で、私がこれをどこに使用するかを皆さんはご存知だと思います。コードの構造を損なうことなく、クエリの数を減らすことはできますか?

それで、次の部分、私のコードはどのように見えますか...

(これはこの質問のために要約されており、コンパイル/実行される場合とされない場合があることに注意してください)

IQueryable<Data.User> users = GetUsers();

users = ApplyFilterSortingPaging(users);//nothing actually executed yet, still building the IQueryable

List<Models.User> results = users.Select(x => x.ToModel());

ここで、ToModel拡張メソッドを確認する必要があります...

public static Models.User ToModel(this Data.User user)
{
    Models.User result = new Models.User()
    {
       Name = user.Name,
       PrimaryAddress = user.Addresses.First(),
       PrimaryEmail = user.Emails.First(),
       PrimaryNumber = user.Numbers.First()
    };
}

ご想像のとおり、連絡先レコードごとに、さらに3つのクエリが実行されています。全体として、パフォーマンスは(少なくとも現時点では)問題ではありません-すべてがかなり高速です。これをレコードごとに1つのクエリに減らすためにできることはありますか?または、1つのメインの「すべてのフィルタリングされたレコードと追加のデータを取得する」クエリにさえも?

多分これはより読みやすく/再利用可能なコードのコストですか?

4

1 に答える 1

1

データベースで必要なデータのビューを作成し、LINQ を使用してクエリを実行できます。

于 2012-04-20T11:58:40.060 に答える