2

チェックされたリストボックスを使用して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);
4

1 に答える 1

2

基本的には、タグに含むだけを実行できます。

List<int> docIds = (from di in frmFocus._context.AllocateDocumentTags
                    where tags.Contains(di.tagId)
                    select di.documentId);

参加する場合:

ObjectSet<Documents> _docs = (from doc in docIds
                              join d in frmFocus._context.Documents.ToList()  on doc equals d.id
                              select d);
于 2012-08-07T13:48:50.163 に答える