0

次のような親テーブルにリンクする2つのリンク列を持つ多くのクロスリンクテーブルがあります。

CREATE TABLE [dbo].[InsuranceDocuments]
(
    [InsuranceDocumentId] [bigint] IDENTITY(1,1) NOT NULL,
    [InsuranceId] [bigint] NOT NULL,
    [DocumentId] [bigint] NOT NULL
)

CREATE TABLE [dbo].[PersonDocuments]
(
    [PersonDocumentId] [bigint] IDENTITY(1,1) NOT NULL,
    [PersonId] [bigint] NOT NULL,
    [DocumentId] [bigint] NOT NULL
)

1) InsuranceId は Insurances テーブルにリンクします

2) Persons テーブルへの PersonId リンク

3) Documents テーブルへの DocumentId リンク

「個人の詳細」や「保険の詳細」などの画面では、初期ロード時に表示する必要があるのはドキュメント情報だけなので、そのような場合でも「ドキュメント リスト」の構造は同じです。ドキュメント テーブルの定義は省略しますが (大きすぎます)、Path、DocumentCategoryId などの基本的なものがあります。

個人と保険のドキュメントの LINQ は次のとおりです。

 public IEnumerable<Models.SearchResult.Document> GetInsuranceDocuments(long parentId)
        {

            using (var db = Core.GetDb())
            {

                var items = db.InsuranceDocuments.Where(a => a.InsuranceId == parentId)
                    .Select(a => new Models.SearchResult.Document
                    {
                        CategoryId = a.Document.DocumentCategoryId,
                        TypeId = a.Document.DocumentTypeId,
                        CreateDate = a.CreateDate,
                        Name = (a.Document.DocumentName == null ? a.Document.DocumentPath : a.Document.DocumentName)

                    }).OrderBy(a=>a.Name).ToArray();
                return items;
            }

        }

 public IEnumerable<Models.SearchResult.Document> GetPersonDocuments(long parentId)
        {

            using (var db = Core.GetDb())
            {

                var items = db.PersonDocuments.Where(a => a.PersonId == parentId)
                    .Select(a => new Models.SearchResult.Document
                    {
                        CategoryId = a.Document.DocumentCategoryId,
                        TypeId = a.Document.DocumentTypeId,
                        CreateDate = a.CreateDate,
                        Name = (a.Document.DocumentName == null ? a.Document.DocumentPath : a.Document.DocumentName)

                    }).OrderBy(a=>a.Name).ToArray();
                return items;
            }
    }

ご覧のとおり、 Select メソッドは両方で同じであり
、その部分を一般化するとよいでしょう。それについては助けが必要です。ありがとうございました。

4

1 に答える 1