2009-10-12 14 views
5

Aquí está mi código:Cómo utilizar un distintivo en una columna utilizando 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 
         }; 

La columna ip debe ser único. No puedo tener elementos duplicados en el campo ip. ¿Es posible hacer esto en linq

Respuesta

7

Puede lograr lo que quiere mediante la agrupación de la dirección IP, pero entonces usted necesita saber cómo quiere manejar el otro campos cuando tienes duplicados.

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

esto funcionó muy bien. Gracias – Luke101

2

Solo puede realizar Distinct en todos los campos que seleccione, no solo en un campo (¿qué valores tomaría para otros campos?).

Usted puede lograr que al utilizar el método de Distinct extensión:

 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

También puede utilizar Distinct() con un comparador de igualdad (es decir, pasar de un método que comparará el valor IP, e ignorar el resto). Pero como pregunta tvanfosson, ¿cuál es el procedimiento correcto para manejar valores duplicados?

Cuestiones relacionadas