class ShowAllOpenDefectsAssignedToTimBySeverityAndLastModified
{
static void Main()//使用orderby子句进行排序 先按严重度排序,
//而后按最后修改时间排序
{
User tim = SampleData.Users.TesterTim;
//tim {User: Tim Trotter (Tester)}
var query = from bug in SampleData.AllDefects
where bug.Status != Status.Closed
//{ 1: MP3 files crash system (2013/5/1-2013/5/23, Showstopper/Accepted, Tim Trotter -> Darren Dahlia)}
//{ 2: Text is too big (2013/5/3-2013/5/9, Trivial/Closed, Deborah Denton -> n/a)}
//{ 3: Sky is wrong shade of blue (2013/5/3-2013/5/19, Minor/Fixed, Colin Carton -> Tara Tutu)}
//{ 4: Can't play files more than 200 bytes long (2013/5/4-2013/5/23, Major/Reopened, Darren Dahlia -> Darren Dahlia)}
//{ 5: Installation is slow (2013/5/6-2013/5/15, Trivial/Fixed, Tim Trotter -> Tim Trotter)}
//{ 6: DivX is choppy on Pentium 100 (2013/5/7-2013/5/29, Major/Accepted, Mary Malcop -> Darren Dahlia)}
//{ 7: Client acts as virus (2013/5/8-2013/5/10, Showstopper/Closed, Deborah Denton -> n/a)}
//{ 8: Subtitles only work in Welsh (2013/5/8-2013/5/23, Major/Fixed, Darren Dahlia -> Tim Trotter)}
//{ 9: Voice recognition is confused by background noise (2013/5/9-2013/5/15, Minor/Closed, Colin Carton -> n/a)}
//{10: User interface should be more caramelly (2013/5/9-2013/5/9, Trivial/Created, Tim Trotter -> Darren Dahlia)}
//{11: Burning a CD makes the printer catch fire (2013/5/10-2013/5/29, Showstopper/Closed, Mary Malcop -> n/a)}
//{12: Peer to peer pairing passes parameters poorly (2013/5/10-2013/5/12, Minor/Accepted, Tara Tutu -> Darren Dahlia)}
//{13: Delay when sending message (2013/5/11-2013/5/20, Minor/Fixed, Darren Dahlia -> Tara Tutu)}
//{14: Volume control needs to go to 11 (2013/5/11-2013/5/11, Minor/Created, Mary Malcop -> Darren Dahlia)}
//{15: Splash screen fades too quickly (2013/5/11-2013/5/15, Minor/Fixed, Colin Carton -> Tara Tutu)}
//{16: Text box doesn't keep up with fast typing (2013/5/12-2013/5/12, Major/Accepted, Deborah Denton -> Deborah Denton)}
//{17: Password displayed in plain text (2013/5/12-2013/5/13, Showstopper/Closed, Darren Dahlia -> n/a)}
//{18: Play button points the wrong way (2013/5/12-2013/5/17, Major/Fixed, Tim Trotter -> Tim Trotter)}
//{19: Wizard needed for CD burning (2013/5/13-2013/5/20, Minor/Fixed, Colin Carton -> Colin Carton)}
//{20: Subtitles don't display during fast forward (2013/5/13-2013/5/14, Trivial/Accepted, Mary Malcop -> Darren Dahlia)}
//{21: Memory leak when watching Memento (2013/5/13-2013/5/13, Trivial/Created, Darren Dahlia -> Deborah Denton)}
//{22: Profile screen shows login count of -1 (2013/5/13-2013/5/20, Major/Accepted, Deborah Denton -> Deborah Denton)}
//{23: Server crashes under heavy load (3 users) (2013/5/13-2013/5/17, Major/Accepted, Tim Trotter -> Deborah Denton)}
//{24: Unable to connect to any media server (2013/5/15-2013/5/18, Showstopper/Reopened, Tara Tutu -> Darren Dahlia)}
//{25: UI turns black and white when playing old films (2013/5/15-2013/5/25, Minor/Fixed, Deborah Denton -> Tara Tutu)}
//{26: Password reset changes passwords for all users (2013/5/16-2013/5/18, Showstopper/Closed, Mary Malcop -> n/a)}
//{27: Modern music sounds rubbish (2013/5/17-2013/5/17, Trivial/Created, Tim Trotter -> Darren Dahlia)}
//{28: Webcam makes me look bald (2013/5/18-2013/5/27, Showstopper/Fixed, Tim Trotter -> Tim Trotter)}
//{29: Sound is distorted when speakers are underwater (2013/5/18-2013/5/18, Major/Created, Colin Carton -> Darren Dahlia)}
//{30: Japanese characters don't display properly (2013/5/19-2013/5/23, Major/Accepted, Darren Dahlia -> Deborah Denton)}
//{31: Video takes 100% of CPU (2013/5/20-2013/5/22, Major/Accepted, Tara Tutu -> Deborah Denton)}
//{32: DVD Easter eggs unavailable (2013/5/22-2013/5/22, Trivial/Created, Tim Trotter -> Darren Dahlia)}
//{33: Transparency is high for menus to be readable (2013/5/23-2013/5/25, Minor/Accepted, Mary Malcop -> Deborah Denton)}
//{34: About box is missing version number (2013/5/24-2013/5/29, Minor/Fixed, Colin Carton -> Colin Carton)}
//{35: Logs record confidential conversations (2013/5/25-2013/5/30, Major/Reopened, Tim Trotter -> Darren Dahlia)}
//{36: Profanity filter is too aggressive (2013/5/27-2013/5/29, Minor/Fixed, Deborah Denton -> Tara Tutu)}
//{37: Full screen mode fails on dual monitors (2013/5/27-2013/5/27, Minor/Created, Tara Tutu -> Deborah Denton)}
//{38: Visualization hypnotises pets (2013/5/28-2013/5/29, Minor/Accepted, Colin Carton -> Deborah Denton)}
//{39: Resizing while typing loses input (2013/5/29-2013/5/29, Trivial/Created, Mary Malcop -> Darren Dahlia)}
//{40: Network is saturated when playing WAV file (2013/5/30-2013/5/31, Minor/Fixed, Tim Trotter -> Tim Trotter)}
//{41: Media library tells user to keep the noise down (2013/5/31-2013/5/31, Major/Created, Tara Tutu -> Darren Dahlia)}
//
where bug.AssignedTo == tim
orderby bug.Severity descending, bug.LastModified
//bug { 5: Installation is slow (2013/5/6-2013/5/15, Trivial/Fixed, Tim Trotter -> Tim Trotter)}
//{ 8: Subtitles only work in Welsh (2013/5/8-2013/5/23, Major/Fixed, Darren Dahlia -> Tim Trotter)}
//{18: Play button points the wrong way (2013/5/12-2013/5/17, Major/Fixed, Tim Trotter -> Tim Trotter)}
//{28: Webcam makes me look bald (2013/5/18-2013/5/27, Showstopper/Fixed, Tim Trotter -> Tim Trotter)}
//{40: Network is saturated when playing WAV file (2013/5/30-2013/5/31, Minor/Fixed, Tim Trotter -> Tim Trotter)}
//第二个bug
//{ 5: Installation is slow (2013/5/6-2013/5/15, Trivial/Fixed, Tim Trotter -> Tim Trotter)}
//{ 8: Subtitles only work in Welsh (2013/5/8-2013/5/23, Major/Fixed, Darren Dahlia -> Tim Trotter)}
//{18: Play button points the wrong way (2013/5/12-2013/5/17, Major/Fixed, Tim Trotter -> Tim Trotter)}
//{28: Webcam makes me look bald (2013/5/18-2013/5/27, Showstopper/Fixed, Tim Trotter -> Tim Trotter)}
//{40: Network is saturated when playing WAV file (2013/5/30-2013/5/31, Minor/Fixed, Tim Trotter -> Tim Trotter)}
select bug;
//query {System.Linq.OrderedEnumerable<Model.Defect,System.DateTime>}
foreach (var bug in query)
//in 调用 bug.Status != Status.Closed
//后调用 bug.AssignedTo == tim
//var bug {28: Webcam makes me look bald (2013/5/18-2013/5/27, Showstopper/Fixed, Tim Trotter -> Tim Trotter)}
//{18: Play button points the wrong way (2013/5/12-2013/5/17, Major/Fixed, Tim Trotter -> Tim Trotter)}
//{ 8: Subtitles only work in Welsh (2013/5/8-2013/5/23, Major/Fixed, Darren Dahlia -> Tim Trotter)}
//{40: Network is saturated when playing WAV file (2013/5/30-2013/5/31, Minor/Fixed, Tim Trotter -> Tim Trotter)}
//{ 5: Installation is slow (2013/5/6-2013/5/15, Trivial/Fixed, Tim Trotter -> Tim Trotter)}
{
Console.WriteLine("{0}: {1} ({2:d})",
bug.Severity, bug.Summary, bug.LastModified);
}
}
}
编译器做了什么呢?只是简明调用了OrderBy和ThenBy方法(或降序的OrderByDescending
/ThenByDescending)。我们的查询表达式转译成了:
SampleData.AllDefects.Where(defect => defect.Status != Status.Closed)
.Where(defect => defect.AssignedTo == tim)
.OrderByDescending(defect => defect.Severity)
.ThenBy(defect => defect.LastModified)
orderby子句的语法,基本上是上下文关键字orderby,后面跟一个或多个排序规则。
一个排序规则就是一个表达式(可以使用范围变量),后面可以紧跟ascending或
descending关键字,默认规则是升序,对于主排序规则的转译就是调用OrderBy
或OrderByDescending,而其他子排序规则通过调用ThenBy或ThenByDescending
来进行转换。
输出
Showstopper: Webcam makes me look bald (2013/5/27)
Major: Play button points the wrong way (2013/5/17)
Major: Subtitles only work in Welsh (2013/5/23)
Minor: Network is saturated when playing WAV file (2013/5/31)
Trivial: Installation is slow (2013/5/15)