zoukankan      html  css  js  c++  java
  • 11.5 【Linq 】连接

    11.5.1 使用 join 子句的内连接

    如果你打算把一个巨大的序列连接到一个极小的序列上,应尽可能把小序列作为右边序列

     1     class Program
     2     {
     3         static void Main(string[] args)
     4         {
     5             var query = from defect in SampleData.AllDefects
     6                         join subscription in SampleData.AllSubscriptions
     7                         on defect.Project equals subscription.Project
     8                         select new { defect.Summary, subscription.EmailAddress };
     9 
    10             foreach (var item in query)
    11             {
    12                 Console.WriteLine("{0} {1}", item.Summary, item.EmailAddress);
    13             }
    14 
    15             Console.ReadKey();
    16         }
    17     }

    我们通常需要对序列进行过滤,而在连接前进行过滤比在连接后过滤效率要高得多。
    在这个阶段,假如只有左边的序列需要进行过滤,查询表达式相对简单一些。例如,如果我们只想显示已经关闭的缺陷,我们可以使用下面的查询表达式

     1     class Program
     2     {
     3         static void Main(string[] args)
     4         {
     5             var query = from defect in SampleData.AllDefects
     6                         where defect.Status == Status.Closed
     7                         join subscription in SampleData.AllSubscriptions
     8                         on defect.Project equals subscription.Project
     9                         select new { defect.Summary, subscription.EmailAddress };
    10 
    11             var query2 = from subscription in SampleData.AllSubscriptions
    12                          join defect in (from defect in SampleData.AllDefects
    13                                          where defect.Status == Status.Closed
    14                                          select defect)
    15                          on subscription.Project equals defect.Project
    16                          select new { defect.Summary, subscription.EmailAddress };
    17 
    18             foreach (var item in query)
    19             {
    20                 Console.WriteLine("{0} {1}", item.Summary, item.EmailAddress);
    21             }
    22 
    23             Console.ReadKey();
    24         }
    25     }

    11.5.2 使用 join...into 子句进行分组连接

     1     class Program
     2     {
     3         static void Main(string[] args)
     4         {
     5             var query = from defect in SampleData.AllDefects
     6                         join subscription in SampleData.AllSubscriptions
     7                         on defect.Project equals subscription.Project
     8                         into groupSubscriptions
     9                         select new { Defect = defect, Subscription = groupSubscriptions };
    10 
    11             foreach (var entry in query)
    12             {
    13                 Console.WriteLine(entry.Defect.Summary);
    14                 foreach (var subscription in entry.Subscription)
    15                 {
    16                     Console.WriteLine("         {0} ", subscription.EmailAddress);
    17                 }
    18             }
    19 
    20             Console.ReadKey();
    21         }
    22     }
     1     class Program
     2     {
     3         static void Main(string[] args)
     4         {
     5             var dates = new DateTimeRange(SampleData.Start, SampleData.End);
     6 
     7             var query = from date in dates
     8                         join defect in SampleData.AllDefects
     9                         on date equals defect.Created.Date
    10                         into joined
    11                         select new { Date = date, Count = joined.Count() };
    12 
    13             var query2 = dates.GroupJoin(SampleData.AllDefects,
    14                                         date => date,
    15                                         defect => defect.Created.Date,
    16                                         (date, joined) => new { Date = date, Count = joined.Count() });
    17 
    18             foreach (var item in query)
    19             {
    20                 Console.WriteLine("{0:d} {1}", item.Date, item.Count);
    21             }
    22 
    23             Console.ReadKey();
    24         }
    25     }

    11.5.3 使用多个 from 子句进行交叉连接和合并序列

     1     class Program
     2     {
     3         static void Main(string[] args)
     4         {
     5             var query = from left in Enumerable.Range(1, 4)
     6                         from right in Enumerable.Range(11, left)
     7                         select new { Left = left, Right = right };
     8 
     9             var query2 = Enumerable.Range(1, 4)
    10                 .SelectMany(left => Enumerable.Range(11, left),
    11                             (left, right) => new { Left = left, Right = right });
    12 
    13             foreach (var item in query)
    14             {
    15                 Console.WriteLine("Left= {0} Right= {1} ", item.Left, item.Right);
    16             }
    17 
    18             Console.ReadKey();
    19         }
    20     }

    SampleData代码,如下

      1     public class SampleData
      2     {
      3         static List<Defect> defects;
      4         static List<User> users;
      5         static List<Project> projects;
      6         static List<NotificationSubscription> subscriptions;
      7 
      8         public static readonly DateTime Start = May(1);
      9         public static readonly DateTime End = May(31);
     10 
     11         public static IEnumerable<Defect> AllDefects
     12         {
     13             get { return defects; }
     14         }
     15 
     16         public static IEnumerable<User> AllUsers
     17         {
     18             get { return users; }
     19         }
     20 
     21         public static IEnumerable<Project> AllProjects
     22         {
     23             get { return projects; }
     24         }
     25 
     26         public static IEnumerable<NotificationSubscription> AllSubscriptions
     27         {
     28             get { return subscriptions; }
     29         }
     30 
     31         public static class Projects
     32         {
     33             public static readonly Project SkeetyMediaPlayer = new Project { Name = "Skeety Media Player" };
     34             public static readonly Project SkeetyTalk = new Project { Name = "Skeety Talk" };
     35             public static readonly Project SkeetyOffice = new Project { Name = "Skeety Office" };
     36         }
     37 
     38         public static class Users
     39         {
     40             public static readonly User TesterTim = new User("Tim Trotter", UserType.Tester);
     41             public static readonly User TesterTara = new User("Tara Tutu", UserType.Tester);
     42             public static readonly User DeveloperDeborah = new User("Deborah Denton", UserType.Developer);
     43             public static readonly User DeveloperDarren = new User("Darren Dahlia", UserType.Developer);
     44             public static readonly User ManagerMary = new User("Mary Malcop", UserType.Manager);
     45             public static readonly User CustomerColin = new User("Colin Carton", UserType.Customer);
     46         }
     47 
     48         static SampleData()
     49         {
     50             projects = new List<Project>
     51             {
     52                 Projects.SkeetyMediaPlayer,
     53                 Projects.SkeetyTalk,
     54                 Projects.SkeetyOffice
     55             };
     56 
     57             users = new List<User>
     58             {
     59                 Users.TesterTim,
     60                 Users.TesterTara,
     61                 Users.DeveloperDeborah,
     62                 Users.DeveloperDarren,
     63                 Users.ManagerMary,
     64                 Users.CustomerColin
     65             };
     66 
     67             subscriptions = new List<NotificationSubscription>
     68             {
     69                 new NotificationSubscription { Project=Projects.SkeetyMediaPlayer, EmailAddress="media-bugs@skeetysoft.com" },
     70                 new NotificationSubscription { Project=Projects.SkeetyTalk, EmailAddress="talk-bugs@skeetysoft.com" },
     71                 new NotificationSubscription { Project=Projects.SkeetyOffice, EmailAddress="office-bugs@skeetysoft.com" },
     72                 new NotificationSubscription { Project=Projects.SkeetyMediaPlayer, EmailAddress="theboss@skeetysoft.com"}
     73             };
     74 
     75             defects = new List<Defect>
     76             {
     77                 new Defect
     78                 {
     79                     Project = Projects.SkeetyMediaPlayer,
     80                     Created = May(1),
     81                     CreatedBy = Users.TesterTim,
     82                     Summary = "MP3 files crash system",
     83                     Severity = Severity.Showstopper,
     84                     AssignedTo = Users.DeveloperDarren,
     85                     Status = Status.Accepted,
     86                     LastModified = May(23)
     87                 },
     88 
     89                 new Defect
     90                 {
     91                     Project = Projects.SkeetyMediaPlayer,
     92                     Created = May(3),
     93                     CreatedBy = Users.DeveloperDeborah,
     94                     Summary = "Text is too big",
     95                     Severity = Severity.Trivial,
     96                     AssignedTo = null,
     97                     Status = Status.Closed,
     98                     LastModified = May(9)
     99                 },
    100 
    101                 new Defect
    102                 {
    103                     Project = Projects.SkeetyTalk,
    104                     Created = May(3),
    105                     CreatedBy = Users.CustomerColin,
    106                     Summary = "Sky is wrong shade of blue",
    107                     Severity = Severity.Minor,
    108                     AssignedTo = Users.TesterTara,
    109                     Status = Status.Fixed,
    110                     LastModified = May(19)
    111                 },
    112 
    113                 new Defect
    114                 {
    115                     Project = Projects.SkeetyMediaPlayer,
    116                     Created = May(4),
    117                     CreatedBy = Users.DeveloperDarren,
    118                     Summary = "Can't play files more than 200 bytes long",
    119                     Severity = Severity.Major,
    120                     AssignedTo = Users.DeveloperDarren,
    121                     Status = Status.Reopened,
    122                     LastModified = May(23)
    123                 },
    124 
    125                 new Defect
    126                 {
    127                     Project = Projects.SkeetyMediaPlayer,
    128                     Created = May(6),
    129                     CreatedBy = Users.TesterTim,
    130                     Summary = "Installation is slow",
    131                     Severity = Severity.Trivial,
    132                     AssignedTo = Users.TesterTim,
    133                     Status = Status.Fixed,
    134                     LastModified = May(15)
    135                 },
    136 
    137                 new Defect
    138                 {
    139                     Project = Projects.SkeetyMediaPlayer,
    140                     Created = May(7),
    141                     CreatedBy = Users.ManagerMary,
    142                     Summary = "DivX is choppy on Pentium 100",
    143                     Severity = Severity.Major,
    144                     AssignedTo = Users.DeveloperDarren,
    145                     Status = Status.Accepted,
    146                     LastModified = May(29)
    147                 },
    148 
    149                 new Defect
    150                 {
    151                     Project = Projects.SkeetyTalk,
    152                     Created = May(8),
    153                     CreatedBy = Users.DeveloperDeborah,
    154                     Summary = "Client acts as virus",
    155                     Severity = Severity.Showstopper,
    156                     AssignedTo = null,
    157                     Status = Status.Closed,
    158                     LastModified = May(10)
    159                 },
    160 
    161                 new Defect
    162                 {
    163                     Project = Projects.SkeetyMediaPlayer,
    164                     Created = May(8),
    165                     CreatedBy = Users.DeveloperDarren,
    166                     Summary = "Subtitles only work in Welsh",
    167                     Severity = Severity.Major,
    168                     AssignedTo = Users.TesterTim,
    169                     Status = Status.Fixed,
    170                     LastModified = May(23)
    171                 },
    172 
    173                 new Defect
    174                 {
    175                     Project = Projects.SkeetyTalk,
    176                     Created = May(9),
    177                     CreatedBy = Users.CustomerColin,
    178                     Summary = "Voice recognition is confused by background noise",
    179                     Severity = Severity.Minor,
    180                     AssignedTo = null,
    181                     Status = Status.Closed,
    182                     LastModified = May(15)
    183                 },
    184 
    185                 new Defect
    186                 {
    187                     Project = Projects.SkeetyTalk,
    188                     Created = May(9),
    189                     CreatedBy = Users.TesterTim,
    190                     Summary = "User interface should be more caramelly",
    191                     Severity = Severity.Trivial,
    192                     AssignedTo = Users.DeveloperDarren,
    193                     Status = Status.Created,
    194                     LastModified = May(9)
    195                 },
    196 
    197                 new Defect
    198                 {
    199                     Project = Projects.SkeetyMediaPlayer,
    200                     Created = May(10),
    201                     CreatedBy = Users.ManagerMary,
    202                     Summary = "Burning a CD makes the printer catch fire",
    203                     Severity = Severity.Showstopper,
    204                     AssignedTo = null,
    205                     Status = Status.Closed,
    206                     LastModified = May(29)
    207                 },
    208 
    209                 new Defect
    210                 {
    211                     Project = Projects.SkeetyTalk,
    212                     Created = May(10),
    213                     CreatedBy = Users.TesterTara,
    214                     Summary = "Peer to peer pairing passes parameters poorly",
    215                     Severity = Severity.Minor,
    216                     AssignedTo = Users.DeveloperDarren,
    217                     Status = Status.Accepted,
    218                     LastModified = May(12)
    219                 },
    220 
    221                 new Defect
    222                 {
    223                     Project = Projects.SkeetyTalk,
    224                     Created = May(11),
    225                     CreatedBy = Users.DeveloperDarren,
    226                     Summary = "Delay when sending message",
    227                     Severity = Severity.Minor,
    228                     AssignedTo = Users.TesterTara,
    229                     Status = Status.Fixed,
    230                     LastModified = May(20)
    231                 },
    232 
    233                 new Defect
    234                 {
    235                     Project = Projects.SkeetyMediaPlayer,
    236                     Created = May(11),
    237                     CreatedBy = Users.ManagerMary,
    238                     Summary = "Volume control needs to go to 11",
    239                     Severity = Severity.Minor,
    240                     AssignedTo = Users.DeveloperDarren,
    241                     Status = Status.Created,
    242                     LastModified = May(11)
    243                 },
    244 
    245                 new Defect
    246                 {
    247                     Project = Projects.SkeetyMediaPlayer,
    248                     Created = May(11),
    249                     CreatedBy = Users.CustomerColin,
    250                     Summary = "Splash screen fades too quickly",
    251                     Severity = Severity.Minor,
    252                     AssignedTo = Users.TesterTara,
    253                     Status = Status.Fixed,
    254                     LastModified = May(15)
    255                 },
    256 
    257                 new Defect
    258                 {
    259                     Project = Projects.SkeetyTalk,
    260                     Created = May(12),
    261                     CreatedBy = Users.DeveloperDeborah,
    262                     Summary = "Text box doesn't keep up with fast typing",
    263                     Severity = Severity.Major,
    264                     AssignedTo = Users.DeveloperDeborah,
    265                     Status = Status.Accepted,
    266                     LastModified = May(12)
    267                 },
    268 
    269                 new Defect
    270                 {
    271                     Project = Projects.SkeetyTalk,
    272                     Created = May(12),
    273                     CreatedBy = Users.DeveloperDarren,
    274                     Summary = "Password displayed in plain text",
    275                     Severity = Severity.Showstopper,
    276                     AssignedTo = null,
    277                     Status = Status.Closed,
    278                     LastModified = May(13)
    279                 },
    280 
    281                 new Defect
    282                 {
    283                     Project = Projects.SkeetyMediaPlayer,
    284                     Created = May(12),
    285                     CreatedBy = Users.TesterTim,
    286                     Summary = "Play button points the wrong way",
    287                     Severity = Severity.Major,
    288                     AssignedTo = Users.TesterTim,
    289                     Status = Status.Fixed,
    290                     LastModified = May(17)
    291                 },
    292 
    293                 new Defect
    294                 {
    295                     Project = Projects.SkeetyMediaPlayer,
    296                     Created = May(13),
    297                     CreatedBy = Users.CustomerColin,
    298                     Summary = "Wizard needed for CD burning",
    299                     Severity = Severity.Minor,
    300                     AssignedTo = Users.CustomerColin,
    301                     Status = Status.Fixed,
    302                     LastModified = May(20)
    303                 },
    304 
    305                 new Defect
    306                 {
    307                     Project = Projects.SkeetyMediaPlayer,
    308                     Created = May(13),
    309                     CreatedBy = Users.ManagerMary,
    310                     Summary = "Subtitles don't display during fast forward",
    311                     Severity = Severity.Trivial,
    312                     AssignedTo = Users.DeveloperDarren,
    313                     Status = Status.Accepted,
    314                     LastModified = May(14)
    315                 },
    316 
    317                 new Defect
    318                 {
    319                     Project = Projects.SkeetyMediaPlayer,
    320                     Created = May(13),
    321                     CreatedBy = Users.DeveloperDarren,
    322                     Summary = "Memory leak when watching Memento",
    323                     Severity = Severity.Trivial,
    324                     AssignedTo = Users.DeveloperDeborah,
    325                     Status = Status.Created,
    326                     LastModified = May(13)
    327                 },
    328 
    329                 new Defect
    330                 {
    331                     Project = Projects.SkeetyTalk,
    332                     Created = May(13),
    333                     CreatedBy = Users.DeveloperDeborah,
    334                     Summary = "Profile screen shows login count of -1",
    335                     Severity = Severity.Major,
    336                     AssignedTo = Users.DeveloperDeborah,
    337                     Status = Status.Accepted,
    338                     LastModified = May(20)
    339                 },
    340 
    341                 new Defect
    342                 {
    343                     Project = Projects.SkeetyTalk,
    344                     Created = May(13),
    345                     CreatedBy = Users.TesterTim,
    346                     Summary = "Server crashes under heavy load (3 users)",
    347                     Severity = Severity.Major,
    348                     AssignedTo = Users.DeveloperDeborah,
    349                     Status = Status.Accepted,
    350                     LastModified = May(17)
    351                 },
    352 
    353                 new Defect
    354                 {
    355                     Project = Projects.SkeetyMediaPlayer,
    356                     Created = May(15),
    357                     CreatedBy = Users.TesterTara,
    358                     Summary = "Unable to connect to any media server",
    359                     Severity = Severity.Showstopper,
    360                     AssignedTo = Users.DeveloperDarren,
    361                     Status = Status.Reopened,
    362                     LastModified = May(18)
    363                 },
    364 
    365                 new Defect
    366                 {
    367                     Project = Projects.SkeetyMediaPlayer,
    368                     Created = May(15),
    369                     CreatedBy = Users.DeveloperDeborah,
    370                     Summary = "UI turns black and white when playing old films",
    371                     Severity = Severity.Minor,
    372                     AssignedTo = Users.TesterTara,
    373                     Status = Status.Fixed,
    374                     LastModified = May(25)
    375                 },
    376 
    377                 new Defect
    378                 {
    379                     Project = Projects.SkeetyTalk,
    380                     Created = May(16),
    381                     CreatedBy = Users.ManagerMary,
    382                     Summary = "Password reset changes passwords for all users",
    383                     Severity = Severity.Showstopper,
    384                     AssignedTo = null,
    385                     Status = Status.Closed,
    386                     LastModified = May(18)
    387                 },
    388 
    389                 new Defect
    390                 {
    391                     Project = Projects.SkeetyMediaPlayer,
    392                     Created = May(17),
    393                     CreatedBy = Users.TesterTim,
    394                     Summary = "Modern music sounds rubbish",
    395                     Severity = Severity.Trivial,
    396                     AssignedTo = Users.DeveloperDarren,
    397                     Status = Status.Created,
    398                     LastModified = May(17)
    399                 },
    400 
    401                 new Defect
    402                 {
    403                     Project = Projects.SkeetyTalk,
    404                     Created = May(18),
    405                     CreatedBy = Users.TesterTim,
    406                     Summary = "Webcam makes me look bald",
    407                     Severity = Severity.Showstopper,
    408                     AssignedTo = Users.TesterTim,
    409                     Status = Status.Fixed,
    410                     LastModified = May(27)
    411                 },
    412 
    413                 new Defect
    414                 {
    415                     Project = Projects.SkeetyTalk,
    416                     Created = May(18),
    417                     CreatedBy = Users.CustomerColin,
    418                     Summary = "Sound is distorted when speakers are underwater",
    419                     Severity = Severity.Major,
    420                     AssignedTo = Users.DeveloperDarren,
    421                     Status = Status.Created,
    422                     LastModified = May(18)
    423                 },
    424 
    425                 new Defect
    426                 {
    427                     Project = Projects.SkeetyTalk,
    428                     Created = May(19),
    429                     CreatedBy = Users.DeveloperDarren,
    430                     Summary = "Japanese characters don't display properly",
    431                     Severity = Severity.Major,
    432                     AssignedTo = Users.DeveloperDeborah,
    433                     Status = Status.Accepted,
    434                     LastModified = May(23)
    435                 },
    436 
    437                 new Defect
    438                 {
    439                     Project = Projects.SkeetyMediaPlayer,
    440                     Created = May(20),
    441                     CreatedBy = Users.TesterTara,
    442                     Summary = "Video takes 100% of CPU",
    443                     Severity = Severity.Major,
    444                     AssignedTo = Users.DeveloperDeborah,
    445                     Status = Status.Accepted,
    446                     LastModified = May(22)
    447                 },
    448 
    449                 new Defect
    450                 {
    451                     Project = Projects.SkeetyMediaPlayer,
    452                     Created = May(22),
    453                     CreatedBy = Users.TesterTim,
    454                     Summary = "DVD Easter eggs unavailable",
    455                     Severity = Severity.Trivial,
    456                     AssignedTo = Users.DeveloperDarren,
    457                     Status = Status.Created,
    458                     LastModified = May(22)
    459                 },
    460 
    461                 new Defect
    462                 {
    463                     Project = Projects.SkeetyTalk,
    464                     Created = May(23),
    465                     CreatedBy = Users.ManagerMary,
    466                     Summary = "Transparency is high for menus to be readable",
    467                     Severity = Severity.Minor,
    468                     AssignedTo = Users.DeveloperDeborah,
    469                     Status = Status.Accepted,
    470                     LastModified = May(25)
    471                 },
    472 
    473                 new Defect
    474                 {
    475                     Project = Projects.SkeetyMediaPlayer,
    476                     Created = May(24),
    477                     CreatedBy = Users.CustomerColin,
    478                     Summary = "About box is missing version number",
    479                     Severity = Severity.Minor,
    480                     AssignedTo = Users.CustomerColin,
    481                     Status = Status.Fixed,
    482                     LastModified = May(29)
    483                 },
    484 
    485                 new Defect
    486                 {
    487                     Project = Projects.SkeetyTalk,
    488                     Created = May(25),
    489                     CreatedBy = Users.TesterTim,
    490                     Summary = "Logs record confidential conversations",
    491                     Severity = Severity.Major,
    492                     AssignedTo = Users.DeveloperDarren,
    493                     Status = Status.Reopened,
    494                     LastModified = May(30)
    495                 },
    496 
    497                 new Defect
    498                 {
    499                     Project = Projects.SkeetyTalk,
    500                     Created = May(27),
    501                     CreatedBy = Users.DeveloperDeborah,
    502                     Summary = "Profanity filter is too aggressive",
    503                     Severity = Severity.Minor,
    504                     AssignedTo = Users.TesterTara,
    505                     Status = Status.Fixed,
    506                     LastModified = May(29)
    507                 },
    508 
    509                 new Defect
    510                 {
    511                     Project = Projects.SkeetyMediaPlayer,
    512                     Created = May(27),
    513                     CreatedBy = Users.TesterTara,
    514                     Summary = "Full screen mode fails on dual monitors",
    515                     Severity = Severity.Minor,
    516                     AssignedTo = Users.DeveloperDeborah,
    517                     Status = Status.Created,
    518                     LastModified = May(27)
    519                 },
    520 
    521                 new Defect
    522                 {
    523                     Project = Projects.SkeetyMediaPlayer,
    524                     Created = May(28),
    525                     CreatedBy = Users.CustomerColin,
    526                     Summary = "Visualization hypnotises pets",
    527                     Severity = Severity.Minor,
    528                     AssignedTo = Users.DeveloperDeborah,
    529                     Status = Status.Accepted,
    530                     LastModified = May(29)
    531                 },
    532 
    533                 new Defect
    534                 {
    535                     Project = Projects.SkeetyTalk,
    536                     Created = May(29),
    537                     CreatedBy = Users.ManagerMary,
    538                     Summary = "Resizing while typing loses input",
    539                     Severity = Severity.Trivial,
    540                     AssignedTo = Users.DeveloperDarren,
    541                     Status = Status.Created,
    542                     LastModified = May(29)
    543                 },
    544 
    545                 new Defect
    546                 {
    547                     Project = Projects.SkeetyMediaPlayer,
    548                     Created = May(30),
    549                     CreatedBy = Users.TesterTim,
    550                     Summary = "Network is saturated when playing WAV file",
    551                     Severity = Severity.Minor,
    552                     AssignedTo = Users.TesterTim,
    553                     Status = Status.Fixed,
    554                     LastModified = May(31)
    555                 },
    556 
    557                 new Defect
    558                 {
    559                     Project = Projects.SkeetyMediaPlayer,
    560                     Created = May(31),
    561                     CreatedBy = Users.TesterTara,
    562                     Summary = "Media library tells user to keep the noise down",
    563                     Severity = Severity.Major,
    564                     AssignedTo = Users.DeveloperDarren,
    565                     Status = Status.Created,
    566                     LastModified = May(31)
    567                 }
    568             };
    569         }
    570 
    571         public static DateTime May(int day)
    572         {
    573             return new DateTime(2013, 5, day);
    574         }
    575 
    576     }
    577     public enum UserType : byte
    578     {
    579         Customer,
    580         Developer,
    581         Tester,
    582         Manager,
    583     }
    584     public class Defect
    585     {
    586         public Project Project { get; set; }
    587         /// <summary>
    588         /// Which user is this defect currently assigned to? Should not be null until the status is Closed.
    589         /// </summary>
    590         public User AssignedTo { get; set; }
    591         public string Summary { get; set; }
    592         public Severity Severity { get; set; }
    593         public Status Status { get; set; }
    594         public DateTime Created { get; set; }
    595         public DateTime LastModified { get; set; }
    596         public User CreatedBy { get; set; }
    597         public int ID { get; private set; }
    598 
    599         public Defect()
    600         {
    601             ID = StaticCounter.Next();
    602         }
    603 
    604         public override string ToString()
    605         {
    606             return string.Format("{0,2}: {1}
        ({2:d}-{3:d}, {4}/{5}, {6} -> {7})",
    607                 ID, Summary, Created, LastModified, Severity, Status, CreatedBy.Name,
    608                 AssignedTo == null ? "n/a" : AssignedTo.Name);
    609         }
    610     }
    611     public class NotificationSubscription
    612     {
    613         /// <summary>
    614         /// Project for which this subscriber is notified
    615         /// </summary>
    616         public Project Project { get; set; }
    617 
    618         /// <summary>
    619         /// The address to send the notification to
    620         /// </summary>
    621         public string EmailAddress { get; set; }
    622     }
    623     public class Project
    624     {
    625         public string Name { get; set; }
    626 
    627         public override string ToString()
    628         {
    629             return string.Format("Project: {0}", Name);
    630         }
    631     }
    632     public enum Severity : byte
    633     {
    634         Trivial,
    635         Minor,
    636         Major,
    637         Showstopper,
    638     }
    639     public static class StaticCounter
    640     {
    641         static int next = 1;
    642         public static int Next()
    643         {
    644             return next++;
    645         }
    646     }
    647     public enum Status : byte
    648     {
    649         /// <summary>
    650         /// Defect has been opened, but not verified as reproducible or an issue.
    651         /// </summary>
    652         Created,
    653         /// <summary>
    654         /// Defect has been verified as an issue requiring work.
    655         /// </summary>
    656         Accepted,
    657         /// <summary>
    658         /// Defect has been fixed in code, but not verified other than through developer testing.
    659         /// </summary>
    660         Fixed,
    661         /// <summary>
    662         /// Defect was fixed, but has now been reopened due to failing verification.
    663         /// </summary>
    664         Reopened,
    665         /// <summary>
    666         /// Defect has been fixed and tested; the fix is satisfactory.
    667         /// </summary>
    668         Closed,
    669     }
    670     public class User
    671     {
    672         public string Name { get; set; }
    673         public UserType UserType { get; set; }
    674 
    675         public User(string name, UserType userType)
    676         {
    677             Name = name;
    678             UserType = userType;
    679         }
    680 
    681         public override string ToString()
    682         {
    683             return string.Format("User: {0} ({1})", Name, UserType);
    684         }
    685     }
    686     static class Extensions
    687     {
    688         public static Dummy<T> Where<T>(this Dummy<T> dummy,
    689                                         Func<T, bool> predicate)
    690         {
    691             Console.WriteLine("Where called");
    692             return dummy;
    693         }
    694     }
    695     class Dummy<T>
    696     {
    697         public Dummy<U> Select<U>(Func<T, U> selector)
    698         {
    699             Console.WriteLine("Select called");
    700             return new Dummy<U>();
    701         }
    702     }
    703     public class DateTimeRange : IEnumerable<DateTime>
    704     {
    705         private readonly DateTime start;
    706         private readonly DateTime end;
    707 
    708         public DateTimeRange(DateTime start, DateTime end)
    709         {
    710             this.start = start;
    711             this.end = end;
    712         }
    713 
    714         public IEnumerator<DateTime> GetEnumerator()
    715         {
    716             for (DateTime current = start; current <= end; current = current.AddDays(1))
    717             {
    718                 yield return current;
    719             }
    720         }
    721 
    722         IEnumerator IEnumerable.GetEnumerator()
    723         {
    724             return GetEnumerator();
    725         }
    726     }
    View Code
  • 相关阅读:
    hi.baidu.com 百度流量统计
    Autofac is designed to track and dispose of resources for you.
    IIS Manager could not load type for module provider 'SharedConfig' that is declared in administration.config
    How to create and manage configuration backups in Internet Information Services 7.0
    定制swagger的UI
    NSwag在asp.net web api中的使用,基于Global.asax
    NSwag Tutorial: Integrate the NSwag toolchain into your ASP.NET Web API project
    JS变量对象详解
    JS执行上下文(执行环境)详细图解
    JS内存空间详细图解
  • 原文地址:https://www.cnblogs.com/kikyoqiang/p/10080055.html
Copyright © 2011-2022 走看看