我有一個只包含字符串的列表。我想做的是分組並返回一個計數。GroupBy並計算列表中的唯一元素
例如:
Foo1
Foo2
Foo3
Foo1
Foo2
Foo2
會導致Foo1:2和Foo2:3,Foo3:1。我已經試過使用LINQ但名單具有的GroupBy可能做的伎倆,但我把事情搞糟了,想不通使用:(
我有一個只包含字符串的列表。我想做的是分組並返回一個計數。GroupBy並計算列表中的唯一元素
例如:
Foo1
Foo2
Foo3
Foo1
Foo2
Foo2
會導致Foo1:2和Foo2:3,Foo3:1。我已經試過使用LINQ但名單具有的GroupBy可能做的伎倆,但我把事情搞糟了,想不通使用:(
var list = new List<string> { "Foo1", "Foo2", "Foo3", "Foo2", "Foo3", "Foo3", "Foo1", "Foo1" };
var grouped = list
.GroupBy(s => s)
.Select(group => new { Word = group.Key, Count = group.Count() });
var items= myList
.GroupBy(g => g)
.Select(t => new {count= t.Count(), key= t.Key });
foreach (var group in items)
Console.WriteLine (group.key + " " + group.count);
var grouped = select new
{
Foo= grp.Key,
Bar= grp.Select(x => x.SomeField).Distinct().Count()
};
與Northwind數據庫中的工作示例,這樣你可以檢查::
NWindCustomersDataContext dc = new NWindCustomersDataContext();
var query = (from c in dc.Customers
join o in dc.Orders on c.CustomerID equals o.CustomerID
group o by c.CustomerID into g
select new
{
CustomerID = g.Key,
Company = (from cust in dc.Customers
where cust.CustomerID == g.Key
select cust).ToList(),
Count = g.Select(x => x.OrderID).Distinct().Count()
}).OrderByDescending(y => y.Count);
foreach (var item in query)
{
Response.Write("CustomerID: " + item.CustomerID + "</br>" + "CompanyName: " + item.Company[0].CompanyName.ToString() + "</br>");
}
Here你可以找到一個很好的例子
一個很好的解決方案可通過按鍵http://msdn.microsoft.com/en-us/library/vstudio/bb534304(v=vs.100).aspx 這組數據;每個鍵都有自己的數據列表,您可以對其進行迭代。
太棒了,謝謝! – Jason94