Query su DataTable

di il
7 risposte

Query su DataTable

Ciao,

avrei bisogno di un suggerimento su come poter eseguire una query che estrapoli solamente alcune colonne da una DataTable (DT nell'esempio) e/o dal dataSet (ds in esempio) già popolato caricando un file XML (FileXML nell'esempio) e che quindi generi una nuova DataTable.

Il problema è dato dal fatto che devo lavorare sulla Tabella intera ma devo visualizzarne solo un sottoinsieme.

Ringrazio per l'aiuto

            Dim ds As New DataSet
            Dim DT as New DataTable

            ds.ReadXml(FileXML)

            If ds.Tables(0).Rows.Count > 0 Then
                DT = ds.Tables(0)

                If Trim(Filtro) <> "" Then

                    DT.DefaultView.RowFilter = Filtro

                End If

		      End If

7 Risposte

  • Re: Query su DataTable

    Non so come rispondere… è uno scherzo?

    Select campo, campo, campo (tutti i campi che ti servono e tutti i campi che non possono essere null visto che devi lavorarci) from tabella…

    Cioè, non stai chiedendo come creare una query complessa con select on select ed elenco di selezione su 3 database differenti… stai chiedendo come creare una vista tabella con solo qualche campo… la base… il minimo sindacale… come nascondere colonne di access… ma il codice lo hai scritto tu o lo Hai copiato da qualche parte? No perché non parlo di import di xml quando non so fare una select di qualche camo di una tabelle

  • Re: Query su DataTable

    Dove devi visualizzare la DataTable ?

  • Re: Query su DataTable

    01/01/2024 - sihsandrea ha scritto:


    Non so come rispondere… è uno scherzo?

    Select campo, campo, campo (tutti i campi che ti servono e tutti i campi che non possono essere null visto che devi lavorarci) from tabella…

    Cioè, non stai chiedendo come creare una query complessa con select on select ed elenco di selezione su 3 database differenti… stai chiedendo come creare una vista tabella con solo qualche campo… la base… il minimo sindacale… come nascondere colonne di access… ma il codice lo hai scritto tu o lo Hai copiato da qualche parte? No perché non parlo di import di xml quando non so fare una select di qualche camo di una tabelle

    ho scritto come poter eseguire una query, non come scrivere una query. Questa è la sezione VB del forum? spero di non aver sbagliato. 

    Non so quale comando VB utilizzare per eseguire la query.

    Scusate evidentemente sono stato troppo generico … 

    Dal codice che ho riportato ho già in memoria un DataTable. Su questa datatable … o dal DataSet… volevo ottenere un sottoinsieme dei campi nella datatable creando un'altra datatable.

    So fare le query, so importare e gestire i file XML, non ho access, non devo nascondere le colonne. Per le query ho sempre usato OLEDB con il quale ero collegato ad un DB ed estrapolavo dati con OleDbCommand.

    Non riesco a capire se e come posso fare a gestire direttamente la DataTable che mi viene generata automaticamente caricando il file XML con la Fx ReadXml del Dataset.

  • Re: Query su DataTable

    02/01/2024 - SirJo ha scritto:


    Dove devi visualizzare la DataTable ?

    Ciao Sirjo,

    la DataTable la visualizzo tramite una DataGridView, il mio problema è generare una  seconda DataTable che è un sottoinsieme della DataTable generata dal caricamento di un file XML. Non so come farlo. Le query le ho sempre eseguite usando OLEDB, qui ho direttamente il DataSet o la DataTable popolati caricando i dati da file XML.

    La DataGridView è dinamica perche genera automaticamente le colonne grazie alla DataTable che gli passo. Questo comporta che le colonne non posso definirle a priori ma deve essere popolata ogni volta in base alla DataTable passata. Per questo devo agire su DataTable e non posso nascondere o visualizzare una colonna sulla DataGridView

  • Re: Query su DataTable

    Forse potresti fare qualcosa con LINQ, ma sinceramente ne so molto poco (non lo uso praticamente mai), però guarda questo esempio se può esserti utile:

    DataTable orders = ds.Tables["SalesOrderHeader"];
    
    var query =
        from order in orders.AsEnumerable()
        where order.Field<bool>("OnlineOrderFlag") == true
        select new
        {
            SalesOrderID = order.Field<int>("SalesOrderID"),
            OrderDate = order.Field<DateTime>("OrderDate"),
            SalesOrderNumber = order.Field<string>("SalesOrderNumber")
        };

    https://learn.microsoft.com/it-it/dotnet/framework/data/adonet/single-table-queries-linq-to-dataset

    Questa è la soluzione “intelligente”

    La soluzione “stupida” invece che mi viene in mente è prima fare un select della DataTable, scaricando i dati su un'altra datatable, e poi con una serie di DataTable.Columns.Remove("nome della colonna") togliere le colonne non volute

  • Re: Query su DataTable

    02/01/2024 - SirJo ha scritto:


    Forse potresti fare qualcosa con LINQ, ma sinceramente ne so molto poco (non lo uso praticamente mai), però guarda questo esempio se può esserti utile:

    DataTable orders = ds.Tables["SalesOrderHeader"];
    
    var query =
        from order in orders.AsEnumerable()
        where order.Field<bool>("OnlineOrderFlag") == true
        select new
        {
            SalesOrderID = order.Field<int>("SalesOrderID"),
            OrderDate = order.Field<DateTime>("OrderDate"),
            SalesOrderNumber = order.Field<string>("SalesOrderNumber")
        };

    https://learn.microsoft.com/it-it/dotnet/framework/data/adonet/single-table-queries-linq-to-dataset

    Questa è la soluzione “intelligente”

    La soluzione “stupida” invece che mi viene in mente è prima fare un select della DataTable, scaricando i dati su un'altra datatable, e poi con una serie di DataTable.Columns.Remove("nome della colonna") togliere le colonne non volute

    Grazie per il supporto SirJo,

    ho trovato la soluzione, semplicissima per giunta,  praticamente basta usare il metodo ToTable della DefaultView.

    DataSet.Tables(X).DefaultView.ToTable([distinct]true/false, (array campi))

    Cio ti permette di ricavare una tabella sottinsieme dalla DataTable e il gioco è fatto

  • Re: Query su DataTable

    01/01/2024 - sihsandrea ha scritto:


    Non so come rispondere… è uno scherzo?

    Select campo, campo, campo (tutti i campi che ti servono e tutti i campi che non possono essere null visto che devi lavorarci) from tabella…

    Cioè, non stai chiedendo come creare una query complessa con select on select ed elenco di selezione su 3 database differenti… stai chiedendo come creare una vista tabella con solo qualche campo… la base… il minimo sindacale… come nascondere colonne di access… ma il codice lo hai scritto tu o lo Hai copiato da qualche parte? No perché non parlo di import di xml quando non so fare una select di qualche camo di una tabelle

    grazie per l'aiuto, era il metodo ToTable della DefaultView

Devi accedere o registrarti per scrivere nel forum
7 risposte