第11章Language Integrated QueryWord文档格式.docx
- 文档编号:4704960
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:52
- 大小:35.45KB
第11章Language Integrated QueryWord文档格式.docx
《第11章Language Integrated QueryWord文档格式.docx》由会员分享,可在线阅读,更多相关《第11章Language Integrated QueryWord文档格式.docx(52页珍藏版)》请在冰点文库上搜索。
类型的列表中搜索数据。
在搜索开始之前,必须确定对象类型和对象列表。
给对象定义类型Racer。
Racer定义了几个属性和一个重载的ToString()方法,该方法以字符串格式显示赛手。
这个类实现了接口IFormattable,以支持格式字符串的不同变体,这个类还实现了接口IComparable<
Racer>
,它根据Lastname为一组赛手排序。
为了执行更高级的查询,类Racer不仅包含单值属性,如Firstname、Lastname、Wins、Country和Starts,还包含多值属性,如Cars和Years。
Years属性列出了赛手获得冠军的年份。
一些赛手曾多次获得冠军。
Cars属性用于列出赛手在获得冠军的年份中使用的所有车型。
usingSystem;
usingSystem.Text;
namespaceWrox.ProCSharp.LINQ
{
[Serializable]
publicclassRacer:
IComparable<
IFormattable
publicstringFirstName{get;
set;
}
publicstringLastName{get;
publicintWins{get;
publicstringCountry{get;
publicintStarts{get;
publicstring[]Cars{get;
}
publicint[]Years{get;
publicoverridestringToString()
returnString.Format("
{0}{1}"
Firstname,Lastname);
publicintCompareTo(Racerother)
returnthis.lastname.CompareTo(other.lastname);
publicstringToString(stringformat)
returnToString(format,null);
publicstringToString(stringformat,IFormatProviderformatProvider)
switch(format)
casenull:
case"
N"
:
returnToString();
F"
returnFirstname;
L"
returnLastname;
C"
returnCountry;
S"
returnStarts.ToString();
W"
returnWins.ToString();
A"
{0}{1},{2};
"
+
starts:
{3},wins:
{4}"
FirstName,LastName,Country,
Starts,Wins);
default:
thrownewFormatException(String.Format(
Format{0}notsupported"
format));
类Formula1在GetChampions()方法中返回一组赛手。
这个列表包含了1950到2007年之间的所有一级方程式冠军。
usingSystem.Collections.Generic;
publicstaticclassFormula1
publicstaticIList<
GetChampions()
List<
racers=newList<
(40);
racers.Add(newRacer(){FirstName="
Nino"
LastName="
Farina"
Country="
Italy"
Starts=33,Wins=5,
Years=newint[]{1950},
Cars=newstring[]{"
AlfaRomeo"
}});
racers.Add(newRacer(){
FirstName="
Alberto"
Ascari"
Starts=32,Wins=10,
Years=newint[]{1952,1953},
Ferrari"
JuanManuel"
Fangio"
Country="
Argentina"
Starts=51,
Wins=24,Years=newint[]
{1951,1954,1955,1956,1957},
Maserati"
"
Mercedes"
Mike"
Hawthorn"
UK"
Starts=45,Wins=3,
Years=newint[]{1958},
Phil"
Hill"
USA"
Starts=48,Wins=3,
Years=newint[]{1961},
John"
Surtees"
Starts=111,Wins=6,
Years=newint[]{1964},
Jim"
Clark"
Starts=72,Wins=25,
Years=newint[]{1963,1965},
Lotus"
Jack"
Brabham"
Australia"
Starts=125,
Wins=14,
Years=newint[]{1959,1960,1966},
Cooper"
Denny"
Hulme"
NewZealand"
Starts=112,
Wins=8,
Years=newint[]{1967},
Graham"
Starts=176,Wins=14,
Years=newint[]{1962,1968},
BRM"
});
Jochen"
Rindt"
Austria"
Starts=60,Wins=6,
Years=newint[]{1970},
Jackie"
Stewart"
Starts=99,Wins=27,
Years=newint[]{1969,1971,1973},
Matra"
Tyrrell"
Emerson"
Fittipaldi"
Brazil"
Starts=143,
Wins=14,Years=newint[]{1972,
1974},
McLaren"
James"
Hunt"
Starts=91,Wins=10,
Years=newint[]{1976},
Mario"
Andretti"
Starts=128,Wins=12,
Years=newint[]{1978},
Jody"
Scheckter"
SouthAfrica"
Wins=10,
Years=newint[]{1979},
Alan"
Jones"
Starts=115,
Wins=12,
Years=newint[]{1980},
Williams"
Keke"
Rosberg"
Finland"
Starts=114,
Wins=5,
Years=newint[]{1982},
Niki"
Lauda"
Starts=173,Wins=25,
Years=newint[]{1975,1977,1984},
Nelson"
Piquet"
Starts=204,Wins=23,
Years=newint[]{1981,1983,1987},
Ayrton"
Senna"
Starts=161,Wins=41,
Years=newint[]{1988,1990,1991},
Nigel"
Mansell"
Starts=187,Wins=31,
Years=newint[]{1992},
Alain"
Prost"
France"
Starts=197,Wins=51,
Years=newint[]{1985,1986,1989,
1993},
Damon"
Starts=114,Wins=22,
Years=newint[]{1996},
Jacques"
Villeneuve"
Canada"
Starts=165,
Wins=11,Years=newint[]{1997},
Mika"
Hakkinen"
Starts=160,
Wins=20,Years=newint[]{1998,
1999},
Michael"
Schumacher"
Germany"
Starts=250,
Wins=91,
Years=newint[]{1994,1995,2000,
2001,2002,2003,2004},
Benetton"
Fernando"
Alonso"
Spain"
Starts=105,Wins=19,
Years=newint[]{2005,2006},
Renault"
Kimi"
R
ikk
nen"
Starts=122,
Wins=15,Years=newint[]{2007},
returnracers;
对于后面在多个列表中执行的查询,GetConstructorChampions()方法返回所有的制造商冠军。
制造商冠军是从1958年开始设立的。
publicstaticIList<
Team>
GetContructorChampions()
List<
teams=newList<
(20);
teams.Add(newTeam(){Name="
Vanwall"
Years=newint[]{1958}});
Years=newint[]{1959,1960}});
Years=newint[]{1961,1964,1975,
1976,1977,1979,1982,1983,1999,
2000,2001,2002,2003,2004,2007}});
Years=newint[]{1962}});
Years=newint[]{1963,1965,1968,
1970,1972,1973,1978}});
Years=newint[]{1966,1967}});
Years=newint[]{1969}});
Years=newint[]{1971}});
Years=newint[]{1974,1984,1985,
1988,1989,1990,1991,1998}});
Years=newint[]{1980,1981,1986,
1987,1992,1993,1994,1996,1997}});
Years=newint[]{1995}});
Years=newint[]{2005,2006}});
returnteams;
现在进入对象查询的核心。
首先,需要用GetChampions()静态方法获得对象列表。
该列表放在泛型类List<
中。
这个类的FindAll()方法接收一个Predicate<
委托,该委托可以实现为一个匿名方法。
只返回Country属性设置为Brazil的赛手。
接着,用Sort()方法给得到的列表排序。
不应按照Lastname属性排序,因为这是Racer类的默认排序方式,而可以传送一个类型为Comparison<
的委托,该委托也实现为一个匿名方法,来比较夺冠次数。
使用r2对象,与r1比较,根据需要进行降序排序。
foreach语句最终迭代已排序的集合中的所有Racer对象。
privatestaticvoidObjectQuery()
(Formula1.GetChampions());
brazilRacers=racers.FindAll(
delegate(Racerr)
returnr.Country=="
;
brazilRacers.Sort(
delegate(Racerr1,Racerr2)
returnr2.Wins.CompareTo(r1.Wins);
foreach(RacerrinbrazilRacers)
Console.Wri
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第11章 Language Integrated Query 11