2017-10-12 7 views
0

私はC#MVCでタグの検索を行っていますが、単語の1つを持つすべての結果しか取得できません。 - 出力は、入力されたすべての単語が一致する場所にのみ存在する必要があります。 2ワードは入力にありますが、そのうちの1つのみが一致します。Linq SQL Search - より多くの一致を持つタグから

これまでの私のコード:

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

私はかなりしばらくの間、これを理解しようとしているが、運とされてきました。

これは理にかなっていると思いますが、あなたのいずれかが私を助けることができます。

+0

Anyの代わりにAllを使用しようとしましたか? – Rob

+0

はい - Anyの代わりにAllを使用すると、1単語以上入力すると結果が表示されません。 – MadsBinger

+0

KDB_questionsとKDB_tagsのモデルについてもう少し詳しくお聞かせください。 – Rob

答えて

1

タグリスト:

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(); 
+0

実行時に結果変数にこのエラーが発生しました。 System.NotSupportedException: 'エンティティへのLINQがメソッドを認識しない'ブールシーケンスSequenceEqual [String](System.Collections.Generic.IEnumerable'1 [System.String]、System.Collections.Generic.IEnumerable'1 [System.String]) 'メソッドであり、このメソッドをストア式に変換することはできません。' – MadsBinger

+0

Aaaahはい。私はこれがLinq2Objectsメソッドだと思うので、Linq2Entitesにうまく翻訳されません。 2番目のクエリの開始でvar result = query.ToList().... – Rob

+0

これは動作しています。 - どうもありがとう! – MadsBinger

関連する問題