我有一个List<T>,其中保存着几个名为TwitterCollection类型的tc的对象。 tc的每个实例包含5个属性。

TwitterCollection类如下所示:

public class TwitterCollection
{
    public string origURL { get; set; }
    public string txtDesc { get; set; }
    public string imgURL { get; set; }
    public string userName { get; set; }
    public string createdAt { get; set; }

}


我正在运行这样的Linq to objects语句:

    var counts = from tc in sList
                 group tc by tc.origURL into g
                 orderby g.Count()
                 select new { myLink = g.Key, Count = g.Count() };


现在,我遇到的问题是我无法访问任何tc属性。我可以访问origURL没问题,因为它已分配给g ...,但是txtDescimgURL和其他属性似乎无法访问。我需要上述声明,以便对我的数据进行适当排序。

我如何修改我的Linq语句以包含tc的所有其他属性,以及如何仍然按Count()对其进行排序/排序。

最佳答案

您已将结果分组-那么您希望获得哪个用户名?该组是元素的完整序列,所有元素都具有相同的URL。如果要使用第一个,可以执行以下操作:

var counts = from tc in sList
             group tc by tc.origURL into g
             orderby g.Count()
             select new { myLink = g.Key, First = g.First(), Count = g.Count() };


然后,您可以执行以下操作:

foreach (var group in counts)
{
    Console.WriteLine(group.First.userName);
}


如果您想要整个组,则只需选择它:

var counts = from tc in sList
             group tc by tc.origURL into g
             orderby g.Count()
             select new { Group = g, Count = g.Count() };


不可否认,此时单独拥有Count没什么意义-您可以这样做:

var groups = sList.GroupBy(tc => tc.origURL)
                  .OrderBy(g => g.Count());


然后,您可以使用:

foreach (var group in groups)
{
    int count = group.Count();
    var key = group.Key;
    foreach (var entry in group)
    {
        // Use each item in the group, etc.
    }
}

07-26 09:27
查看更多