0

にあるこの問題がありcolumnますSQL table。値は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を使用してこれを達成する方法はありますか?

注:私のデータソースは ' entries'LINQ(.NET 2.0に組み込まれている)をサポートしていないため、LIST変数のLINQ演算子で作業できます

        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();
4

4 に答える 4