2009-10-12 11 views
5

Qui è il mio codice:Come utilizzare una netta su una colonna utilizzando Linq

var query = from row1 in table.AsEnumerable() 
         let time = row1.Field<DateTime>("time") 
         let uri = row1.Field<string>("cs-uri-stem") 
         let ip = row1.Field<string>("c-ip") 
         let questionid = row1.Field<int>("questionid") 
         where questionid == int.Parse(table.Rows[x]["questionid"].ToString()) 
         select new 
         { 
          time, 
          uri, 
          ip, 
          questionid 
         }; 

L'ip colonna deve essere univoco. Non posso avere voci duplicate nel campo IP. è possibile farlo in linq

risposta

7

È possibile ottenere ciò che si vuole raggruppando tramite l'indirizzo IP, ma poi avrete bisogno di sapere come si desidera gestire l'altra campi quando hai duplicati.

var query = from row1 in table.AsEnumerable() 
        let time = row1.Field<DateTime>("time") 
        let uri = row1.Field<string>("cs-uri-stem") 
        let ip = row1.Field<string>("c-ip") 
        let questionid = row1.Field<int>("questionid") 
        where questionid == int.Parse(table.Rows[x]["questionid"].ToString()) 
        group by ip into g 
        select new 
        { 
         time = g.time.First(), 
         uri = g.uri.First(), 
         ip = g.Key, 
         questionid = g.questionid.First() 
        }; 
+0

questo ha funzionato alla grande. Grazie – Luke101

2

È possibile eseguire solo un Distinct su tutti i campi selezionati, non solo su un campo (quali valori si prenderanno per altri campi?).

È possibile ottenere che utilizzando il metodo Distinct estensione:

 var query = (from row1 in table.AsEnumerable() 
        let time = row1.Field<DateTime>("time") 
        let uri = row1.Field<string>("cs-uri-stem") 
        let ip = row1.Field<string>("c-ip") 
        let questionid = row1.Field<int>("questionid") 
        where questionid == int.Parse(table.Rows[x]["questionid"].ToString()) 
        select new 
        { 
         time, 
         uri, 
         ip, 
         questionid 
        }).Distinct(); 
2

È inoltre possibile utilizzare Distinct() con un confronto di uguaglianza (vale a dire, passa in un metodo che metterà a confronto il valore IP, e ignorare il resto). Ma come chiede tvanfosson, qual è la procedura corretta per gestire i valori duplicati?

Problemi correlati