我试图使用Linq返回一个列表,该列表由匹配最多到最少的项目排序。
我有一个由";"分隔的"相关标签"或"关键字"字符串:
a, b, c, d, e, f, g
我在数据库中有一个记录a,它有
a, b, c, d, e, f, g
我在数据库中有另一个记录Ba, b, c;
我想使用linq搜索数据库并返回记录a在列表中排名第一,记录B在列表中排名第二。
尝试:
dbContext2.Mains.where(x => x.VideoID == VideoID.ToString())
.where( x=> x.Tags.Contains(ListOfKeyWords))
.single();
我们可以从制定一个方法开始,该方法将给标记字符串:
评分。public int GetScore(string contentTags, IEnumerable<string> relevantTags) {
int score = 0;
string[] splittedTags = contentTags.split(';');
for(int i = 0; i < splittedTags.Length; i++) {
if(relevantTags.Contains(splittedTags[i])) {
score++;
}
}
return score;
}
根据你的问题,你有一个类似的类:
public class MyContext : DbContext {
public DbSet<Main> Mains { get; set; }
}
要获得给定相关性评分的Main
记录的有序列表,您可以执行以下操作:
IEnumerable<Main> records = myContext.Mains.OrderByDescending(x => GetScore(x.Tags, ListOfKeywords));