チェックされたリストボックスを使用してwinformsアプリで表示されたドキュメントをフィルタリングしようとしています。これにより、2つのタグが選択された場合、それらのタグを含むドキュメントのみが表示され、3番目のタグが選択されたときにさらにウィンドウダウンされます。EntityFrameworkを使用しています。これが私が持っているものですが、それは効率的ではないかもしれないと思います。私はdbに頻繁にクエリを実行しなければならないのが好きではありません。何かご意見は?
List<int> docIds = null;
if (tags != null)
{
docIds.AddRange(from di in frmFocus._context.AllocateDocumentTags
where di.tagId == tags[0]
select di.documentId);
for (int i = 1; i < tags.Length; i++)
{
List<int> docList = (from dId in frmFocus._context.AllocateDocumentTags
where dId.tagId == tags[i]
select dId.documentId).ToList();
foreach (int n in docIds)
{
if (!docList.Contains(n))
{
docIds.Remove(n);
}
}
}
}
今私はIDに基づいてドキュメントを表示しようとしていますが...これが新しいコードです
docIds = (from di in frmFocus._context.AllocateDocumentTags.Distinct()
where tags.Contains(di.tagId)
select di.documentId).ToList();
tagManagment.fillUsed(docIds);
}
ObjectSet<Documents> _docs = (from d in frmFocus._context.Documents
where docIds.Contains(d.id)
select d);