C# 用于匹配的Linq查询
我正在尝试使用Linq返回一个列表,该列表按最匹配项和最不匹配项排序 我有一个由“;”分隔的“相关标记”或“关键字”字符串: a;BCDEFg 我在数据库中有一条记录a a;BCDEFg 我在数据库中还有一条记录B A.Bc 我想使用linq和return搜索数据库 一个列表,其中记录a位于列表的第一位,记录B位于第二位 尝试:C# 用于匹配的Linq查询,c#,linq,C#,Linq,我正在尝试使用Linq返回一个列表,该列表按最匹配项和最不匹配项排序 我有一个由“;”分隔的“相关标记”或“关键字”字符串: a;BCDEFg 我在数据库中有一条记录a a;BCDEFg 我在数据库中还有一条记录B A.Bc 我想使用linq和return搜索数据库 一个列表,其中记录a位于列表的第一位,记录B位于第二位 尝试: dbContext2.Mains.where(x => x.VideoID == VideoID.ToString()) .whe
dbContext2.Mains.where(x => x.VideoID == VideoID.ToString())
.where( x=> x.Tags.Contains(ListOfKeyWords))
.single();
我们可以从制定一个方法开始,该方法将为一系列标记打分:
到目前为止你有没有尝试过什么?你能提供更多的细节吗?你是说你想返回一个列表,其中记录a是第一个,因为它只是有更多的“标记”?@sr28只是因为它匹配了更多的标记。是的,谢谢!:)您想“返回列表”,但代码以
.single()结尾代码>。另外,您的代码无论如何也不会编译,因为Where
和Single
应该以大写字母开头。无论如何,用LINQ解决这个问题将是很困难的;即使在SQL中这样做也不容易。我不确定这是否可以转换为SQL,他正在使用EF,所以必须检查它,否则他可以简单地实现IComparable接口
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; }
}
IEnumerable<Main> records = myContext.Mains.OrderByDescending(x => GetScore(x.Tags, ListOfKeywords));