我正在尝试使用Linq返回一个列表,该列表按照最匹配的项目排序。
我有一串由“;”分隔的“相关标签”或“关键字” :
a; b; c; d; e; f; g
我在数据库中有一个记录A
a; b; c; d; e; f; g
我在数据库中有另一条记录B. A; B; C;
我想使用linq搜索数据库并返回 一个列表,其中记录A是列表中的第一个,记录B是第二个。
尝试:
dbContext2.Mains.where(x => x.VideoID == VideoID.ToString())
.where( x=> x.Tags.Contains(ListOfKeyWords))
.single();
答案 0 :(得分:0)
我们可以首先制定一个方法,为标签字符串提供分数:
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));