2017-05-14 3 views
0

Ich habe eine Suchmethode namens "UniversalClientSearch" und befindet sich in einer Datahandler-Klasse. Die Methode sucht nach Daten in einer Tabelle, abhängig davon, welche Spalte und was in dieser Spalte gesucht wird. Anschließend muss die Methode eine Tabellenvariable zurückgeben, die in einer Datagridview auf einem meiner Formulare verwendet werden soll.Verwenden von LinQ to SQL zum Zurückgeben der Tabelle

Ich habe eine LinQ to SQL-Anweisung erstellt, um die Datenzeilen zu erhalten, die ich möchte, und in einem var ReturnSearchQuery gespeichert, aber ich weiß nicht, wie diese Abfrage in eine Variable der Tabelle zu konvertieren Tabellenname ist tbclient.

 //Fields 
     private DataAccessDataContext db; 

     //Constructor 
     public Datahandler() 
     { 
      this.db = new DataAccessDataContext(); 
     } 

     //Method 
     public Table<tbClient> UniversalClientSearch(string SearchType, string SearchParameter) 
     { 
      //This is just here to initialize the variable so it can be changed in the switch 
      var ReturnSearchQuery = from Clients in db.tbClients 
            select Clients; 

      //Filters Query based on what column to search 
      switch (SearchType) 
      { 
       case "Client_ID": 
        ReturnSearchQuery = from Clients in db.tbClients 
         where Clients.Client_ID == int.Parse(SearchParameter) 
         select Clients; 
        break; 

       case "Client_Name": 
        ReturnSearchQuery = from Clients in db.tbClients 
         where Clients.Client_Name.Contains(SearchParameter) 
         select Clients; 
        break; 

       case "Client_Address": 
        ReturnSearchQuery = from Clients in db.tbClients 
         where Clients.Client_Address.Contains(SearchParameter) 
         select Clients; 
        break; 

       case "Contact_Number": 
        ReturnSearchQuery = from Clients in db.tbClients 
         where Clients.Contact_Number.Contains(SearchParameter) 
         select Clients; 
        break; 

       case "Contact_Email": 
        ReturnSearchQuery = from Clients in db.tbClients 
         where Clients.Contact_Email.Contains(SearchParameter) 
         select Clients; 
        break; 

       case "Client_Type": 
        ReturnSearchQuery = from Clients in db.tbClients 
         where Clients.Client_Type == SearchParameter 
         select Clients; 
        break; 
      } 

      //Make new table to be returned later 
      Table<tbClient> ReturnClientsTable = new Table<tbClient>(); 

      foreach (var item in ReturnSearchQuery) 
      { 
       //Query has to be converted to Table<tbClient> 
      } 

      //Table return to be used in datagridview 
      return ReturnClientsTable; 
     } 

Antwort

1

ReturnSearchQuery im Code hat den Typ IQueryable<tbClient>:

// The SQL query isn't run yet 
IQueryable<tbClient> ReturnSearchQuery = from Clients in db.tbClients 
      where <some condition> 
      select Clients; 

Durch verzögerte Ausführung, die SQL-Abfrage nicht ausgeführt wird, bis Sie die IQueryable aufzuzählen. Schließlich

// Convert the IQueryable to a list. Here, the SQL query is run. 
List<tbClient> clients = ReturnSearchQuery.ToList(); 

, können Sie binden die Liste der Kunden zu einem DataGridView von .DataSource mit:

var d = new DataGridView(); 
d.DataSource = clients; 
+0

Danke, ich werde übernehmen diese in mein Projekt! Ich habe einen Workaround dafür, während ich die Antwort nicht erhalten konnte, die den Rückgabetyp für die ** UniversalClientSearch ** -Methode auf dynamische ändern und dann nur die ** ReturnSearchQuery ** zurückgeben sollte. –