[英]Comma separated values from SQL, getting distinct values and their count
我在SQL table
有一column
遇到了這個問題。 值以comma separated
格式。
例如:
1) facebook,google,just giving, news letter, in-store
2) facebook,google,just giving
3) just giving
4) facebook
5) google
6) in-store,email
7) email,facebook
現在,我想查詢該表並在列表中獲取此值,其中列表包含不同的值及其計數。
例如:
1) facebook - 10
2) email - 20
3) in-store -5
and so on....
反正有使用LINQ實現此目的嗎?
注意:我可以對LIST變量使用LINQ運算符,因為我的“ entries'
數據源不支持LINQ(內置.NET 2.0)
var results = new List<string>();
var builder = new StringBuilder();
foreach (var entry in entries.Cast<MWCompetitionsEntry>().Where(entry => entry.HowFound != null))
{
builder.Append(entry.HowFound).Append(",");
}
results.Add(builder.ToString());
facebook,email,in-store,google,in-store,newsletter,facebook,email,facebok
現在,我可以處理results
變量。 我不知道如何從該變量及其計數中獲取唯一值。
請幫忙
var values = new List<string>();
var builder = new StringBuilder();
var howFoundValues = new List<string>{"Email", "Facebook", "Twitter", "Leaflet", "Just Giving", "In-Store", "Other"};
foreach (var entry in entries.Cast<MWCompetitionsEntry>().Where(entry => entry.HowFound != null))
{
builder.Append(entry.HowFound).Append(",");
}
values.Add(builder.ToString());
var result1 = values.SelectMany(l => l.Split(','))
.Where(howFoundValues.Contains) //will disregard any other items
.GroupBy(e => e)
.Select(e => String.Format("{0} - {1}",e.Key, e.Count()))
.ToList();
怎么樣:
var result = from word in entries.SelectMany(e => e.HowFound.Split(','))
group word by word into gr
select new {Entry = gr.Key, Count = gr.Count()};
分組而不是唯一允許您計數。
var entries = new List<string>{"facebook,google,just giving, news letter, in-store",
"facebook,google,just giving",
"just giving",
"facebook",
"google",
"in-store,email",
"email,facebook"};
var result = entries
.SelectMany (e => e.Split(','))
.GroupBy (e => e).Select (g => string.Format("{0} - {1}", g.Count (), g.Key));
result.Dump();
結果是
4 - facebook
3 - google
3 - just giving
1 - news letter
1 - in-store
1 - in-store
2 - email
它首先拆分您的條目,然后按不同的字符串分組。
如果您的數據像示例中那樣包含前導和/或尾隨空格,請考慮使用.GroupBy(e => e.Trim())
像這樣:
var groupedResults = results.SelectMany(v => v.Split(','))
.GroupBy(n => n)
.Select((item, index) =>
new {
name = String.Format("{0}) {1}", index+1, item.Key),
count = item.Count()
})
.ToList();
嘗試這個
Dictionary<string, int> valuesAndCount = new Dictionary<string, int>();
foreach (var entry in entries) // entries is a collection of records from table
{
string[] values = entry.Split(',');
foreach (var value in values)
{
if (!valuesAndCount.ContainsKey(value))
{
valuesAndCount.Add(value, 0);
}
valuesAndCount[value] = valuesAndCount[value] + 1;
}
}
//Then you'llhave your distinct values and thei count
foreach (var key in valuesAndCount.Keys)
{
Console.WriteLine("{0} {1}",key, valuesAndCount[key]);
}
然后字典應包含您的不同值及其數量
LINQ版本
IEnumerable<string> strings = entries
.ToList()
.SelectMany(e => e.Split(','))
.GroupBy(v => v)
.Select(str => string.Format("{0} {1}", str.Count(), str.Key));
foreach (var p in strings)
{
Console.WriteLine(p);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.