Domanda Conversione LINQ query da C# a VB.NET

  • venerdì 13 aprile 2012 06:17
     
      Contiene codice

    Buongiorno a tutti. Ho un problema con una query linq che non riesco a convertire da C# a VB.NET.

    Ho una ObservableCollection con una struttura così:

    Jet     Owner		Item	Comp 
    AAAA    AAAA		101	2210 
    AAAA    AAAA		202	2220 
    AAAA    AAAA		301	5550 
    AAAA    AAAA		301	5560 
    AAAA    2210		101	6789 
    AAAA    2220		202	ABABA 
    AAAA    5550		301	XXXX0 
    AAAA    5550		301	XXXX1 
    AAAA    5560		301	YYYY0 
    AAAA    5560		301	6612 
    AAAA    6789		101	ZZZZZ.0 
    AAAA    6789		101	ZZZZZ.1 
    AAAA    6789		101	ZZZZZ.2 
    AAAA    6789		101	ZZZZZ.3 
    AAAA    ABABA	202	TTTTT.0 
    AAAA    ABABA	202	TTTTT.1 
    AAAA    ABABA	202	TTTTT.2 
    AAAA    6612		301	ZZZZZ.0 
    AAAA    6612		301	ZZZZZ.1 
    AAAA    6612		301	ZZZZZ.2 
    AAAA    6612		301	ZZZZZ.3 
    AAAB    ...		...	..... 

    Dovrei ordinarla per ottenere un risultato così:

    Jet     Owner		Item	Comp 
    AAAA    AAAA		101	2210 
    AAAA    2210		101	6789 
    AAAA    6789		101	ZZZZZ.0 
    AAAA    6789		101	ZZZZZ.1 
    AAAA    6789		101	ZZZZZ.2 
    AAAA    6789		101	ZZZZZ.3 
    AAAA    AAAA		202	2220 
    AAAA    2220		202	ABABA 
    AAAA    ABABA	202	TTTTT.0 
    AAAA    ABABA	202	TTTTT.1 
    AAAA    ABABA	202	TTTTT.2 
    AAAA    AAAA		301	5550 
    AAAA    5550		301	XXXX0 
    AAAA    5550		301	XXXX1 
    AAAA    AAAA		301	5560 
    AAAA    5560		301	YYYY0 
    AAAA    5560		301	6612 
    AAAA    6612		301	ZZZZZ.0 
    AAAA    6612		301	ZZZZZ.1 
    AAAA    6612		301	ZZZZZ.2 
    AAAA    6612		301	ZZZZZ.3 
    AAAB    ...		...	..... 

    In particolare l'ordinamento viene fatto per "Jet", quindi se in "comp" trovo qualcosa che che è presente in "Owner", posiziono le righe sotto "Owner" del "comp" relativo, quindi ordino per "owner" e alla fine per "Item".

    La query in C# è questa :

    var orderedData =(from d in collection 
            group d by d.Jet into g 
            orderby g.Key 
            from d in g 
            select new[] {d}.Union(g.Where(c => c.Owner == d.Comp)) into withChildren 
            from wc in withChildren 
            orderby wc.Item 
            select wc).Distinct(); 
    Vorrei ottenere lo stesso risultato in VB.NET. Ho proato la conversione, ma mi incarto sul "select".




    • Modificato jotric1 venerdì 13 aprile 2012 06:51
    •  

Tutte le risposte

  • venerdì 13 aprile 2012 07:53
     
     

    In che senso ti incarti sul select?

    Come hai scritto finora la query in VB .NET che ti dà il problema? Ci mostri qualcosa?


    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

  • venerdì 13 aprile 2012 08:05
     
      Contiene codice

    Inizio col ringraziarti per l'attenzione.

    Mi incarto nel senso che questa forma del "select "non ho idea di come possa essere riscritta in VB.NET.

    La conversione fatta fin'ora è questa:

    Dim orderedData = (From d In collection Group d By d.Jet Into g = Group Order By g From d In g Select New With {.withChildren = {d}.Union(g.Where(Function(c) c.Owner = d.Comp))}

    From wc In withChildren Order By wc.pos Select wc).Distinct

    Ho trovato qualche esempio, ma nessuno significativo.


    • Modificato jotric1 venerdì 13 aprile 2012 08:05
    •  
  • venerdì 20 aprile 2012 08:57
     
     

    hai provato a convertire usando un tool (web, #develop)?

    a me dà

    (From withChildren In From g In From d In collectionGroup d By d.JetOrder By g.KeyFrom d In gNew () {d}.Union(g.Where(Function(c) c.Owner = d.Comp))From wc In withChildrenOrder By wc.Itemwc).Distinct()

    ... ovviamente il codice va verificato e testato

  • domenica 13 maggio 2012 02:54
    Proprietario
     
     

    Ciao jotric1,

    Potresti gentilmente aggiornarci sul thread? Sei riuscito a risolvere seguendo i suggerimenti ricevuti finora?

    Grazie in anticipo della tua risposta,


    Irina Turcu - Microsoft

    [Manifesto] Regole e Aspetti generali all'uso dei forum MSDN

    Questo contenuto è distribuito “as is” e non implica alcuna responsabilità da parte di Microsoft. L'azienda offre questo servizio gratuitamente, allo scopo di aiutare gli utenti e approfondire la loro conoscenza dei prodotti e tecnologie Microsoft.

    LinkedIn

  • lunedì 14 maggio 2012 06:30
     
     
    Mi scusa per il mancato aggiornamento della situazione, comunque alla fine ho cambiato approccio non riuscendo ad effettuare una conversione esatta, ho usato una variabile temporanea per dividere la query in due. Poco elegante ma funzionante. Grazie.