c#

位置:IT落伍者 >> c# >> 浏览文章

.NET LINQ数据转换


发布日期:2018年07月06日
 
.NET LINQ数据转换

使用 LINQ 进行数据转换

语言集成查询 (LINQ) 不仅可用于检索数据 而且还是一个功能强大的数据转换工具 通过使用 LINQ 查询您可以将源序列用作输入并采用多种方式修改它以创建新输出序列 您可以通过排序和分组来修改序列本身而不必修改元素本身但是LINQ 查询的最强大功能可能在于它能够创建新类型 这一功能在 select 子句中实现 例如可以执行下列任务

将多个输入序列合并到具有新类型的单个输出序列中

创建其元素只包含源序列中的各个元素的一个或几个属性的输出序列

创建其元素包含对源数据执行的操作结果的输出序列

创建不同格式的输出序列

将多个输入联接到一个输出序列

可以使用 LINQ 查询来创建包含多个输入序列的元素的输出序列下面的示例演示如何组合两个内存中的数据结构但组合来自 XML 或 SQL 或数据集源的数据时可应用相同的原则

class Student{    public string First { get; set; }    public string Last {get; set;}    public int ID { get; set; }    public string Street { get; set; }    public string City { get; set; }    public List<int> Scores;}class Teacher{    public string First { get; set; }    public string Last { get; set; }    public int ID { get; set; }     public string City { get; set; }}

class DataTransformations{    static void Main()    {        List<Student> students = new List<Student>()        {            new Student {First=Svetlana                Last=Omelchenko                 ID=                 Street= Main Street                City=Seattle                Scores= new List<int> { }}            new Student {First=Claire                Last=ODonnell                 ID=                Street= Main Street                City=Redmond                Scores= new List<int> { }}            new Student {First=Sven                Last=Mortensen                ID=                Street= Main Street                City=Lake City                Scores= new List<int> { }}        };        List<Teacher> teachers = new List<Teacher>()        {                            new Teacher {First=Ann Last=Beebe ID= City = Seattle}            new Teacher {First=Alex Last=Robinson ID= City = Redmond}            new Teacher {First=Michiyo Last=Sato ID= City = Tacoma}        };        var peopleInSeattle = (from student in students                    where studentCity == Seattle                    select studentLast)                    Concat(from teacher in teachers                            where teacherCity == Seattle                            select teacherLast);        ConsoleWriteLine(The following students and teachers live in Seattle:);        foreach (var person in peopleInSeattle)        {            ConsoleWriteLine(person);        }        ConsoleWriteLine(Press any key to exit);        ConsoleReadKey();    }}

选择各个源元素的子集

若要只选择源元素的一个成员请使用点运算在下面的示例中假定 Customer 对象包含几个公共属性其中包括名为 City 的字符串在执行此查询时此查询将生成字符串输出序列

var query = from cust in Customers select custCity;

若要创建包含源元素的多个属性的元素可以使用具有命名对象或匿名类型的对象初始值设定项

var query = from cust in Customer select new {Name = custName City = custCity};

将内存中的对象转换为 XML

通过 LINQ 查询可以轻松地在内存中的数据结构SQL 数据库ADONET 数据集和 XML 流或文档之间转换数据

class XMLTransform{    static void Main()    {                    List<Student> students = new List<Student>()        {            new Student {First=Svetlana Last=Omelchenko ID= Scores = new List<int>{ }}            new Student {First=Claire Last=ODonnell ID= Scores = new List<int>{ }}            new Student {First=Sven Last=Mortensen ID= Scores = new List<int>{ }}        };        var studentsToXML = new XElement(Root            from student in students            let x = StringFormat({}{}{}{} studentScores[]                    studentScores[] studentScores[] studentScores[])            select new XElement(student                       new XElement(First studentFirst)                       new XElement(Last studentLast)                       new XElement(Scores x)                    )                 );         ConsoleWriteLine(studentsToXML);        ConsoleWriteLine(Press any key to exit);        ConsoleReadKey();    }}

对源元素执行操作

输出序列可能不包含源序列的任何元素或元素属性输出可能是通过将源元素用作输入参数计算出的值的序列在执行下面这个简单查询时此查询会输出一个字符串序列该序列值表示根据 double 类型的元素的源序列进行的计算

class FormatQuery{    static void Main()    {                    double[] radii = { };        IEnumerable<string> query =            from rad in radii            select StringFormat(Area = {} (rad * rad) * );        foreach (string s in query)            ConsoleWriteLine(s);        ConsoleWriteLine(Press any key to exit);        ConsoleReadKey();    }}

               

上一篇:C#中HashTable简介和使用用法

下一篇:C#代码关闭Windows XP