技术开发 频道

SQL Server 2008使用LINQ进行数据访问

任务 7 – 扩展查询表达式

至此,本实验中演示的查询都只进行了最为基本的筛选。但是,LINQ支持许多选项来查询数据,这不仅仅是简单的筛选。例如,为了对伦敦的所有客户根据他们的ContactName进行排序,您可以使用orderby子句:

static void ObjectQuery()
{
            var db
= new NorthwindDataContext();
            db.Log
= Console.Out;
            var results
= from c in db.Customers
                          
where c.City == "London"
      orderby c.ContactName descending
       select
new { c.ContactName, c.CustomerID };
            
foreach (var c in results)
                Console.WriteLine(
"{0}\t{1}", c.CustomerID, c.ContactName);
}
static void Main(string[] args)
{
    ObjectQuery();
}

点击Ctrl+F5 来构建和运行应用程序。注意,客户是根据第二列 - 名称列,按降充的方式进行排序的。点击任意键以结束应用程序。 
可以继续进行不同类型的查询:编写一个查询,计算出位于每个城市的客户数量。为了完成这个任务,您需要使用group by表达式。

static void ObjectQuery()
{
            var db
= new NorthwindDataContext();
            db.Log
= Console.Out;
            var results
= from c in db.Customers
     group c by c.City into g
      orderby g.Count() ascending
       select
new { City = g.Key, Count = g.Count() };
            
foreach (var c in results)
                Console.WriteLine(
"{0}\t{1}", c.City, c.Count);
}

点击Ctrl+F5 以运行应用程序。查看输出的结果后,, 点击任意键以结束应用程序。   
通常,当编写查询时,您需要通过两个表进行搜索。通常可以使用一个join运算符来实现,该运算符在C# 3.0中受到支持。在ObjectQuery中,使用下面的代码替换原来的代码。在前面的任务中,您曾经将所有居住在伦敦的客户的所有订单都查询并打印了出来。在这里,我们不再打印所有的订单,而是打印出每个客户的订单的数量。

static void ObjectQuery()  
{
    var db
= new NorthwindDataContext();
    db.Log
= Console.Out;
    var results
= from c in db.Customers
                  join e
in db.Employees on c.City equals e.City
                  group e by e.City into g
                  select
new { City = g.Key, Count = g.Count() };
            
    
foreach (var c in results)
        Console.WriteLine(
"{0}\t{1}", c.City, c.Count);
}

点击 Ctrl+F5 以运行应用程序。查看输出的结果,以及输出的SQL查询。点击任意键以结束应用程序。 

这个示例展示了当数据间没有显式的关系时,如何使用一个SQL样式的联结。
 
实验总结

在本实验中,您完成了下列练习:

 
LINQ to Objects: 面向内存中集合的LINQ
LINQ to XML: 面向XML文档的LINQ
LINQ to DataSets: 面向DataSet对象的LINQ
LINQ to SQL: 面向连接数据库的LINQ

本实验展示了LINQ框架及功能如何无缝的集成来自不同数据源的数据访问与处理。LINQ允许您利用SQL的功能和C#的灵活性,来处理内存中的对象。LINQ to SQL和LINQ to DataSets利用这种支持来将您的对象连接到数据库表和数据。最后,LINQ to XML利用XPath的功能实现了XML查询,并简化了C#代码。众多的标准查询运算符为数据处理提供了内置的支持,有些功能在早期的版本中可能需要再去扩展自定义的代码。使用C#与LINQ,查询数据并将数据转换到不同的格式也比以往更加简单。

0
相关文章