Cómo obtener todos los registros relacionales usando LINQ

la mesa como esta:

id | userid |   contentid
-------------------------
41 |   92   |     1187
42 |   92   |     1189
43 |   92   |     1190
44 |   92   |     1193
45 |   92   |     1200
46 |   92   |     1201
47 |   92   |     1202
48 |   104  |     1200
49 |   104  |     1201
50 |   104  |     1202
51 |   103  |     1200
52 |   103  |     1201
53 |   103  |     1202

y estoy tratando de obtener todos los identificadores de contenido relacionados con 1202 (por ejemplo).

  1. Tomaría agrupados a todos los usuarios que han añadido este contenido.
  2. Después de agrupar los registros según los ID de contenido, excepto 1202, se debe ordenar el número de grupos.

en breve quiero obtener la siguiente lista:

1201 - count: 3
1200 - count: 3
1187 - count: 1
1189 - count: 1
1190 - count: 1
1193 - count: 1

Probé una consulta como la siguiente para que fuera la forma que quiero, pero se necesita hacer más otras cosas.

(from x in IRepository<ContentRelation>().Query().ToList()
    where x.Content.Id == content.Id
    group x by x.GUser.Id into c
    select new
    {
      a = c.Key,
      b = (from d in IRepository<ContentRelation>().Query()
           where d.GUser.Id == c.Key && d.Content.Id != content.Id
           select d)
    })

Editar: obtuve lo que quiero con las siguientes consultas, pero no estoy seguro de que sea la manera correcta:

var q = DependencyResolver.Current.GetService<IRepository<ContentRelation>>().Query();

List<int> gh = new List<int>();

foreach (var item in q.Where(x => x.Content.Id == content.Id).GroupBy(x => x.GUser.Id).Select(x => x.Key))
{
    foreach (var a in q.Where(x => x.GUser.Id == item && x.Content.Id != content.Id).ToList())
    {
        gh.Add(a.Content.Id);
    }
}

foreach (var hhj in gh.GroupBy(x => x).OrderByDescending(x => x.Count()))
{
    Response.Write(hhj.Key + "-" + hhj.Count()+ "<br />");
}

preguntado el 08 de noviembre de 11 a las 13:11

2 Respuestas

Con eso tienes lo que quieres (en teoría :))

IRepository<ContentRelation>().Query().GroupBy(x => x.Content.Id).Select(x => new Tuple<int, int>(x.Key, x.Count())).OrderBy(x => x.First)

respondido 08 nov., 11:17

var result = IRepository<ContentRelation>().Query()
                                           .GroupBy(p => p.contentid)
                                           .Select(p => new
                                           {
                                               contentid=p.Key,
                                               counter=p.Count()
                                           });

Respondido 30 Jul 12, 23:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.