我正在用C# MVC编写一个标签搜索,但是我只能得到所有有一个单词的结果。-输出只应在所有输入单词匹配的情况下进行,如果输入中有两个单词,则不包括输出,但其中只有一个匹配。
到目前为止我的代码是:
List<String> list = Request["tags"].Split(' ').ToList();
KDBEntities q = new KDBEntities();
var query = (from tag in q.KDB_tags join question in q.KDB_questions on tag.question_id equals question.id where list.Any(x => x.Equals(tag.tag)) select question);
var Rquery = query.GroupBy(x => x.id).Select(grp => grp.FirstOrDefault()).ToList();
return View(Rquery);
我已经想了很长一段时间了,但没有运气。
希望这是有意义的,你们中的任何人都可以帮我。
发布于 2017-10-12 02:07:26
标签列表:
List<TagObj> tags = new List<TagObj>()
{
new TagObj() { Id = 1, QuestionId = 1, Tag = "news" },
new TagObj() { Id = 2, QuestionId = 1, Tag = "sports" },
new TagObj() { Id = 3, QuestionId = 1, Tag = "famous" },
new TagObj() { Id = 4, QuestionId = 2, Tag = "news" },
new TagObj() { Id = 5, QuestionId = 2, Tag = "sports" },
new TagObj() { Id = 6, QuestionId = 3, Tag = "news" },
new TagObj() { Id = 7, QuestionId = 4, Tag = "funny" },
};
问题清单:
List<QuestionObj> questions = new List<QuestionObj>()
{
new QuestionObj(){ QuestionId = 1, Question = "Whats up footballers?" },
new QuestionObj(){ QuestionId = 2, Question = "These are famous news?" },
new QuestionObj(){ QuestionId = 3, Question = "Read all about it?" },
new QuestionObj(){ QuestionId = 4, Question = "You know whats funny?" }
};
这些是来自请求的传入标记:
var incomingTags = new List<string>() { "news", "sports" };
以下是以下问题:
var query = from t in tags
join q in questions on t.QuestionId equals q.QuestionId
where incomingTags.Contains(t.Tag)
select new { question = q, tag = t };
var result = query.
GroupBy(g => g.question.QuestionId).
Where(g => g.ToList().Select(l => l.tag.Tag).SequenceEqual(incomingTags)).
Select(s => s.First().question).ToList();
https://stackoverflow.com/questions/46705278
复制相似问题