私は単純なタイプを持っていますQuestion
:
public class Question
{
public string[] Tags { get; set; }
public DateTime Created { get; set; }
}
質問のリストがありますが、タグのリストに沿ってそれらをフィルタリングする必要があります (フィルターと呼ばれます)。フィルタ リストに一致するタグが最も多い質問は、結果コレクションの上位に配置する必要があります。そのための表現を書きました:
public IList<Question> GetSimiliar(IList<Questions> all, string[] filters)
{
var questions = all.Select(
x => new
{
MatchedTags = x.Tags
.Count(tag => filters.Contains(tag)),
Question = x
})
.Where(x => x.MatchedTags > 0)
.OrderByDescending(x => x.MatchedTags)
.Select(x => x.Question);
return questions.ToList();
}
今、同じ数の一致したタグを持つ質問が複数あるような状況のサポートが必要です。このような質問は、作成日でさらに並べ替える必要があります (新しいものから古いものへ)。
私が欲しいものの例:
フィルタ: タグ = [a,b,c]
フィルタリングする質問のコレクション:
- q1 { タグ = [a]、作成 = 1939 }
- q2 { タグ = [b]、作成 = 1945 }
- q3 { タグ = [a、b、c]、作成済み = 1800 }
- q4 { タグ = [a,b]、作成 = 2012 }
- q5 { タグ = [z]、作成 = 1999 }
result - ソートされたコレクション:
- q3
- q4
- q2
- q1
linq を使用してそれを行う方法は?