ToArray、ToList、ToDictionary、ToLookup、OfType

#region using
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Text;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
using System.Collections;
#endregion

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        #region 用ToArray()将查询结果转化为数组
        Response.Write("<hr>用ToArray将查询结果转化位数组<br>");
        var students = from student in GetStudents()
                       orderby student.Age
                       select student.Name;
        var nameArray = students.ToArray();
        foreach (var name in nameArray)
        {
            Response.Write(string.Format("<span class='result'>{0}</span>", name));
        }
        #endregion 

        #region 用ToList()将查询结果转化为List集合
        Response.Write("<hr>用ToList()将查询结果转化为List集合<br>");
        var students1 = from student in GetStudents()
                       where student.Age>21
                       orderby student.Age
                       select student.Name;
        var nameArray1 = students1.ToList();
        nameArray1.Add("newlist");
        foreach (var name in nameArray1)
        {
            Response.Write(string.Format("<span class='result'>{0}</span>", name));
        }
        #endregion 

        #region 用ToDictionary()将查询结果转化为Dictionary
        Response.Write("<hr>用ToDictionary()将查询结果转化为Dictionary<br>");
        var studentDict = GetStudents().ToDictionary(student => student.Name);
        var Y = studentDict["YOUNG"];
        Response.Write(string.Format("<span class='result'>YOUNG:{0},{1},{2}</span>", Y.Name, Y.Age, Y.Language));
 
          ToDictionary可以传两个lambada表达式,第一个是Key,第二个就是Value。
   //加载XML文件
    XDocument xdoc = XDocument.Load(fileName);
    XElement root = xdoc.Element("message");

  //读取XML内容
   messages = root.Elements("add")
    .ToDictionary(
        key => key.Attribute("key").Value,
        value => value.Attribute("value").Value
    );
 
        #endregion 

        #region 用OfType过滤查询结果中的类型
        Response.Write("<hr>用OfType过滤查询结果中的类型<br>");
        object[] objects = { 1, "love",GetStudents()[1], 2.1, null, GetStudents()[3],"young"};
        var students2 = objects.OfType<Student>();
        foreach (var student in students2)
        {
            Response.Write(string.Format("<span class='result'>{0}</span>", student.Name));
        }
        #endregion
    }

    #region 构造一个学生集合体
    private List<Student> GetStudents()
    {
        List<Student> students = new List<Student> 
             new Student{ Name="YOUNG", Age=25, Language="Chinese"},
             new Student{ Name="JESSIE", Age=21, Language="Scotland"},
             new Student{ Name="KELLY", Age=18, Language="English"},
             new Student{ Name="JUNE", Age=20, Language="English"},
             new Student{ Name="ADRIAN", Age=22, Language="Italy"},
             new Student{ Name="BRUCE", Age=17, Language="Scotland"},
             new Student{ Name="BRANT", Age=30, Language="Germany"},
             new Student{ Name="BEN", Age=25, Language="Chinese"}
        };
        return students;
    }
    #endregion
}

#region 学生类
class Student
{
    public int Age { get; set; }
    public string Name { get; set; }
    public string Language { get; set; }
}
#endregion

显示结果
 
ToDictionary() 不会处理重复键,该用 ToLookup()来处理重复键 来解决
 
var data = new[]{
            Tuple.Create("001", "James"),
            Tuple.Create("002", "Linda"),
            Tuple.Create("003", "Frank"),
            Tuple.Create("004", "Jack"),
            Tuple.Create("002", "Rose"),
            Tuple.Create("001", "Lynn"),
            Tuple.Create("008", "Luke")
        };

var dict = data.ToLookup(t => t.Item1, t => t.Item2)
            .ToDictionary(t => t.Key, t => t.First());
 
原文地址:https://www.cnblogs.com/wyongqi/p/7685278.html