通過使用 LINQ 查詢,可以将源序列用作輸入,并采用多種方式修改它以建立新輸出序列。可以通過排序和分組來修改序列本身,而不必修改元素本身。但是,LINQ 查詢最強大的功能可能在于它能夠建立新類型,這一功能在 select 子句中實作。
(一)Student
public class Student
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Unid { get; set; }
public List<int> Scores { get; set; }
}
(二)選擇源元素子集
學生清單集合
List<Student> _list = new List<Student>()
{
new Student {FirstName="Svetlana", LastName="Omelchenko",
Unid=111, Scores = new List<int>{97, 92, 81, 60}},
new Student {FirstName="Claire", LastName="O’Donnell",
Unid=112, Scores = new List<int>{75, 84, 91, 39}},
new Student {FirstName="Sven", LastName="Mortensen",
Unid=113, Scores = new List<int>{88, 94, 65, 91}}
};
(1)選擇一個成員
·選擇FirstName
var list = from p in _list select p.FirstName;
foreach (string s in list)
Console.WriteLine(s);
這裡可以使用匿名類型。因為select部分為字元串類型,是以,也可以是字元串型泛型集合
List<string> list = (from p in _list
select p.FirstName).ToList<string>();
Console.WriteLine(s);
·選擇Scores
這裡為整型泛型集合,
可以使用匿名類型
var list1 = from p in _list select p.Scores;
foreach (var l in list1)
foreach (int i in l)
Console.WriteLine(i);
因為結果集為整型泛型集合,是以也可以使用
List<List<int>> list = (from p in _list
select p.Scores).ToList<List<int>>();
foreach (List<int> l in list)
foreach (int i in l)
Console.WriteLine(i);
(2)選擇多個成員
·使用匿名類型
var q = from p in _list
select new { Name = p.FirstName + "·" + p.LastName };
foreach (var x in q)
Console.WriteLine(x.Name);
其中select傳回部分也為一個複合類型,是以在通路時,要以元素的.Name來通路。
如果使用匿名類型時,不采用别名指派的話,會有異常:
無效的匿名類型成員聲明符。匿名類型成員必須使用指派、簡單名稱或成員通路來聲明。
·使用命名對象
建立Sample類
public class Sample
public string Name { get; set; }
使用
select new Sample { Name = p.FirstName + "·" + p.LastName };
發現與匿名類型複合值時相近。其實也就是:
List<Sample> list= (from p in _list
select new Sample { Name = p.FirstName + "·" + p.LastName }).ToList<Sample>();
foreach (Sample x in list)
(三)轉換為Xml
還是用上邊那那個學生集合
new Student {FirstName="Svetlana", LastName="Omelchenko",
};
var xele = new XElement("Students",
from student in _list
let x = String.Format("{0},{1},{2},{3}",
student.Scores[0],
student.Scores[1],
student.Scores[2],
student.Scores[3])
select new XElement("student",
new XElement("FirstName",student.FirstName),
new XElement("LastName", student.LastName),
new XElement("Unid", student.Unid),
new XElement("Scores", x)
)
);
Console.WriteLine(xele);
現在分析一下:
(1)Xelement元素的構造方法
public XElement(XName name,Object[] content)
(2)上邊的生成xml的構造方法其實使用的就是這個
第一部分:"Students"為根元素
而下邊那麼多其實是一行的内容,即占用第二個參數,要記住一句話 查詢在select中實作。是以意思就是傳回Xelement類型的結果集,而這個結果集正好為構造方法中Object[] content部分。
可知道student這個元素包含4個子節點。而Scores這裡是List<int>類型,是以設定了傳回類型及格式為字元串且用逗号隔開。(Let:可以将表達式結果存放在新的範圍變量中)。
部落格園大道至簡
http://www.cnblogs.com/jams742003/轉載請注明:部落格園