2017-05-12 3 views
2

Ich bin ein Anfänger für Programmierung und ich habe versucht, eine Suchmaschine zu schaffen, aber es sa Teil Ich weiß nicht, wie es zu lösen, die eine IList als Gattungszurückgibt,IList <T> Rückkehr als Ober

public IList<T> Search<T>(string textSearch) 
{ 

    IList<T> list = new List<T>(); 

    var result = new DataTable(); 
    using (Analyzer analyzer = new PanGuAnalyzer()) 
    { 
     var queryParser = new QueryParser(Version.LUCENE_30, "FullText", analyzer); 

     queryParser.AllowLeadingWildcard = true; 

     var query = queryParser.Parse(textSearch); 

     var collector = TopScoreDocCollector.Create(1000, true); 

     Searcher.Search(query, collector); 

     var matches = collector.TopDocs().ScoreDocs; 


     result.Columns.Add("Title"); 
     result.Columns.Add("Starring"); 
     result.Columns.Add("ID"); 

     foreach (var item in matches) 
     { 
      var id = item.Doc; 
      var doc = Searcher.Doc(id); 

      var row = result.NewRow(); 

      row["Title"] = doc.GetField("Title").StringValue; 
      row["Starring"] = doc.GetField("Starring").StringValue; 

      row["ID"] = doc.GetField("ID").StringValue; 

      result.Rows.Add(row); 

     } 
    } 
    return result; 
} 

aber in diesem Code konnte ich das Ergebnis nicht zurückgeben, es heißt nicht implizit konvertieren Typ 'Data.DataTable' in 'Generic.IList', eine explizite Konvertierung exists.so wie kann ich das lösen?

+0

Der Prototyp Ihrer Funktion zeigt an, dass sie eine 'IList' zurückgeben soll, aber Sie geben stattdessen eine' DataTable' zurück ... – Misery

+0

Wenn Sie die Datensätze in Ihrer DataTable können Sie verwenden 'return result.Rows.Cast () .ToList();' – Misery

+0

Lieber zurück, eine 'DataTable' warum nicht einfach eine Liste von Filmen (zum Beispiel), z. B.' IList ' – Sean

Antwort

1

Ich denke, dass Sie Generika nicht unterstützen wollen, da es keinen Sinn macht und unmöglich ist. Sie haben eine Klasse, zum Beispiel Film, dann eine List<Film> zurückkehren, brauchen Sie nicht die DataTable:

public IList<Film> SearchFilms(string textSearch) 
{ 
    IList<Film> list = new List<Film>(); 
    using (Analyzer analyzer = new PanGuAnalyzer()) 
    { 
     var queryParser = new QueryParser(Version.LUCENE_30, "FullText", analyzer); 
     queryParser.AllowLeadingWildcard = true; 
     var query = queryParser.Parse(textSearch); 
     var collector = TopScoreDocCollector.Create(1000, true); 

     Searcher.Search(query, collector); 
     var matches = collector.TopDocs().ScoreDocs; 

     foreach (var item in matches) 
     { 
      var film = new Film(); 

      var id = item.Doc; 
      var doc = Searcher.Doc(id); 

      film.Title = doc.GetField("Title").StringValue; 
      film.Starring = doc.GetField("Starring").StringValue; 
      film.ID = doc.GetField("ID").StringValue; 

      list.Add(film); 
     } 
    } 
    return list; 
} 
+0

Sein wenig kompliziert ..., ich habe eigentlich eine Datenbank, und ich benutzte Datentabelle, die Daten wie folgt zu erhalten: Table Probe { erhalten { var query = von Video in db.Video_List wählen Video; Rückgabe ToDataTable (query.ToList()); } } – Kevin

+0

Sein wenig kompliziert ..., ich habe eigentlich eine Datenbank, und ich benutzte Datentabelle, die Daten wie folgt zu erhalten: Table Probe {get {var query = von Video in db.Video_List wählen Sie Video ; Rückgabe von ToDataTable (query.ToList()); }} - – Kevin

0

Ihre return-Anweisung

result.AsEnumerable().ToList(); 

sollten Sie nicht vergessen Namespace hinzufügen

+0

Ich habe versucht, dies zu verwenden, und immer noch einen Fehler sagt, \t Kann Typ 'System.Collections.Generic.List nicht implizit in' System.Collections.Generic konvertieren.IList ' – Kevin

+0

Ich habe versucht, dies zu verwenden, und immer noch einen Fehler sagt, \t Kann nicht implizit Typ' System.Collections.Generic.List konvertieren 'zu' System.Collections.Generic.IList ' @Imad – Kevin

+0

@Kevin werfen Sie einen Blick http://StackOverflow.com/A/38865748/3664659 – Imad

Verwandte Themen