次のような親テーブルにリンクする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 メソッドは両方で同じであり
、その部分を一般化するとよいでしょう。それについては助けが必要です。ありがとうございました。