LinQ的ToLookUp練習

LinQ的ToLookUp練習

我們在做專案時,常常會遇到下面這種狀況

    public class Data
    {
        public decimal id { get; set; }
        public string name { get; set; }
        public string message { get; set; }
    }

 

 private static List<Data> GenData()
        {
            List<Data> d = new List<Data>(){
                 new Data(){id=1, name="阿扁",message="我是1號"},
                 new Data(){id=2, name="阿扁",message="我是男生"},
                 new Data(){id=3, name="阿扁",message="民進黨"},
                 new Data(){id=4, name="英久",message="我是2號"},
                 new Data(){id=5, name="英久",message="我是男生"},
                 new Data(){id=6, name="英久",message="國民黨"},
                 new Data(){id=7, name="登輝",message="我是3號"},
                 new Data(){id=8, name="登輝",message="親民黨"},
            };
            return d;
        }        

 

就是要將資料以Name的形式做Group,而message以逗號隔開

做法有二種,第一種是用T-Sql,而這裡我們介紹是用ToLookUp,直接看範例

  /// <summary>
        /// 使用ToLookUp
        /// </summary>
        private static void Method1()
        {
            string temp = "";
            List<Data> data = GenData();
            Dictionary<string, string> d = new Dictionary<string, string>();

            //使用ToLookUp
            var c = (from i in data
                     select new { i.id, i.name, i.message }).ToLookup(x => x.name);

            //置入字典檔
            foreach (var group in c)
            {
                temp = "";
                foreach (var item in group)
                    temp += item.message + ",";
                d.Add(group.Key, temp);
            }
            //顯示結果
            foreach (KeyValuePair<string, string> item in d)
            {
                Console.WriteLine(string.Format("姓名:{0}  訊息:{1}", item.Key, item.Value));
            }

            Console.Read();
        }

顯示的結果

2010-8-25 下午 02-29-47

是不是很方便呢~~如果還有其它更好的方法可以一起討論唷 ^ ^