我有一个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
...,但是txtDesc
,imgURL
和其他属性似乎无法访问。我需要上述声明,以便对我的数据进行适当排序。我如何修改我的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.
}
}