我有一个List<T>
,它持有几个名为tc TwitterCollection
的对象。每个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()
排序/排序。
答案 0 :(得分:3)
您已将结果分组 - 您希望获得哪个用户名?该组是一个完整的序列元素,都具有相同的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.
}
}
答案 1 :(得分:1)
问题是您已经有效地丢弃了组中的所有项目。你需要以某种方式维护这些信息。例如:
var groups = from tc in sList
group tc by tc.origURL into g
orderby g.Count()
select new { myLink = g.Key, Items = g };
foreach(var group in groups) {
Console.WriteLine("Link: {0}, Count: {1}", group.myLink, group.Items.Count());
foreach(var item in group.Items) {
Console.WriteLine(item.txtDesc);
}
}