我有一個需求,問題有很多標簽,在查詢時,需要篩選包含查詢標簽的一個集合(List<int>),以前的做法是先查詢出來符合查詢標簽條件的標簽id的結果集A,再查詢問題時,加上判斷是否包含該標簽或者查詢問題編號是否在結果集A中,這種方法實在是不得已之舉。
今天經過不斷試驗,發現可以通過使用linq的except來實現一次性查詢出結果。
···
集合.WhereIf(input.Tags != null && input.Tags.Count > 0, q => q.QuestionTags.LongCount()>=input.Tags.Count&& q.QuestionTags.Select(qt => qt.TagId).Except(input.Tags).LongCount()>=0)
···
需要注意的是,首先需要排除問題標簽小於標簽選擇條件個數的記錄,其次使用LongCount()>=0來滿足問題擁有的標簽個數大於選擇條件的情況。最重要的是except的使用。