Linq查询匹配

时间:2015-05-27 13:47:37

标签: c# linq

我正在尝试使用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();

1 个答案:

答案 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));