score:3

Accepted answer
edgelist.groupby(x=>x.source)
                   .where(x=>x.skip(linkcount).any())
                   .selectmany(x=>x)
                   .tolist()

score:0

        dictionary<string, int> occurrence = new dictionary<string, int>();
        foreach (edgedata edge in edgelist)
        {
            if (occurrence.containskey(edge.source)) 
                occurrence[edge.source] += 1;
            else
                occurrence[edge.source] = 1;
        }

        int counter = 0;
        while(counter < edgelist.count)
        {
            if (occurrence[edgelist[counter].source] < linkcount)
                edgelist.removeat(counter);
            else 
                counter++;
        }

score:1

ienumerable<edgedata> result = edgelist.groupby( edgeitem => edgeitem.source)

    // keep only the groups with enough elements:
    .where(group => group.skip(linkcount).any())

    // ungroup, so we get a neat sequence
    .selectmany(group => group);

Related Query

More Query from same tag