深入理解 c# 第十一章 使用group...by子句进行分组 通过分配者分配缺陷 简单的投影

    class GroupDefectsByAssignee
    {
        static void Main()//通过分配者分配缺陷 简单的投影 使用group...by子句进行分组
        {
            var query = from defect in SampleData.AllDefects
                        where defect.AssignedTo != null
//defect 这里有41个缺陷
//{ 1: MP3 files crash system    (2013/5/1-2013/5/23, Showstopper/Accepted, Tim Trotter -> Darren Dahlia)}
//下面不写了						
                        group defect by defect.AssignedTo;
//query {System.Linq.GroupedEnumerable<Chapter11.Model.Defect,Chapter11.Model.User,Chapter11.Model.Defect>}

            foreach (var entry in query)
//entry {System.Linq.Lookup<Chapter11.Model.User,Chapter11.Model.Defect>.Grouping}			

            {
                Console.WriteLine(entry.Key.Name);
                foreach (var defect in entry)
//defect { 1: MP3 files crash system    (2013/5/1-2013/5/23, Showstopper/Accepted, Tim Trotter -> Darren Dahlia)}
//后面有40个不写了				
                {
                    Console.WriteLine("  ({0}) {1}",
                                      defect.Severity,
                                      defect.Summary);
                }
                Console.WriteLine();
            }
        }
    }


  在查询表达式对序列进行分组,只需要使用group...by子句,语法:  
  group projection by grouping
  该字句和select子句一样,出现在查询表达式的末尾。但他们的相似之处不止于此:projection
表达式和select子句使用的投影是相同的类型。只不过生成的结果稍有不同。
  grouping表达式通过其键来决定序列如何分组。整个结果是一个序列,序列中的每个元素本身
就是投影后元素的序列,还具有一个Key属性,即用于分组的键;这样的组合是封装在IGrouping
<TKey,TElement>接口中的,它扩展了IEnumerable<TElement>。如果想根据多个值来进行
分组,可以使用一个匿名类型作为键。
  每日构建报告有用,可以快速看到每个人需要负责哪些缺陷。对缺陷进行过滤,排除无须关注
的缺陷,用AssignedTo属性进行分组。虽然此刻我们使用的是属性,实际上可以使用任何你想用

的东西作为分组表达式--它会应用到序列的每个条目上,然后序列将根据表达式的结果进行分组。


输出
Darren Dahlia
  (Showstopper) MP3 files crash system
  (Major) Can't play files more than 200 bytes long
  (Major) DivX is choppy on Pentium 100
  (Trivial) User interface should be more caramelly
  (Minor) Peer to peer pairing passes parameters poorly
  (Minor) Volume control needs to go to 11
  (Trivial) Subtitles don't display during fast forward
  (Showstopper) Unable to connect to any media server
  (Trivial) Modern music sounds rubbish
  (Major) Sound is distorted when speakers are underwater
  (Trivial) DVD Easter eggs unavailable
  (Major) Logs record confidential conversations
  (Trivial) Resizing while typing loses input
  (Major) Media library tells user to keep the noise down


Tara Tutu
  (Minor) Sky is wrong shade of blue
  (Minor) Delay when sending message
  (Minor) Splash screen fades too quickly
  (Minor) UI turns black and white when playing old films
  (Minor) Profanity filter is too aggressive


Tim Trotter
  (Trivial) Installation is slow
  (Major) Subtitles only work in Welsh
  (Major) Play button points the wrong way
  (Showstopper) Webcam makes me look bald
  (Minor) Network is saturated when playing WAV file


Deborah Denton
  (Major) Text box doesn't keep up with fast typing
  (Trivial) Memory leak when watching Memento
  (Major) Profile screen shows login count of -1
  (Major) Server crashes under heavy load (3 users)
  (Major) Japanese characters don't display properly
  (Major) Video takes 100% of CPU
  (Minor) Transparency is high for menus to be readable
  (Minor) Full screen mode fails on dual monitors
  (Minor) Visualization hypnotises pets


Colin Carton
  (Minor) Wizard needed for CD burning
  (Minor) About box is missing version number

猜你喜欢

转载自blog.csdn.net/eyetired/article/details/80248278