天天看點

Linq資料類型轉換

通過使用 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/

轉載請注明:部落格園

上一篇: Log4net之簡介