2015-05-27 5 views
-2

Я пытаюсь использовать Linq для возврата списка, отсортированного по элементам, которые соответствуют наименее.Linq Запрос для сопоставления

У меня есть строка «соответствующие теги» или «ключевые слова», разделенные символом «;» :

а, Ь; с; д, е, е, ж

У меня записать в базу данных, которая имеет

а, Ь; с; д, е, е, ж

У меня есть другая запись B в базе данных, которая имеет a; b; c;

Я хочу найти базу данных с помощью linq и вернуть список, в котором запись A первая в списке, а запись B будет второй.

Пробовал:

dbContext2.Mains.where(x => x.VideoID == VideoID.ToString()) 
       .where(x=> x.Tags.Contains(ListOfKeyWords)) 
       .single(); 
+2

Вы уже пробовали что-нибудь? – sr28

+0

Можете ли вы дать более подробную информацию? – Coder1409

+0

Вы хотите, чтобы вы вернули список, в котором запись A является первой, потому что у нее просто больше «тегов»? – sr28

ответ

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; } 
} 

Получить список заказа o f Ваш Main записей с учетом релевантности, вы можете сделать следующее:

IEnumerable<Main> records = myContext.Mains.OrderByDescending(x => GetScore(x.Tags, ListOfKeywords)); 
+0

Я не уверен, что это можно перевести на SQL, он использует EF, поэтому должен проверить его, иначе он мог бы просто реализовать интерфейс IComparable – Coder1409

Смежные вопросы