`
terryfeng
  • 浏览: 493468 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

LINQ 标准的查询操作符 连接 join in on equals

阅读更多

使用 join 子句可以根据特定的条件合并两个数据源,但之前要获得两个要连接的列表。

在一级方程式比 赛中,设有赛手冠军和制造商冠军。

赛手从GetChampions()方法中返回,制造商从GetConstructorChampions() 方法中返回。

现在要获得一个年份列表,列出每年的赛手和制造商冠军。

为此,先定义两个查询,用于查询赛手和制造商团队:

车手集合结构:

new Racer() 
{ 
FirstName = "Michael", 
LastName = "Schumacher", 
Country = "Germany", 
Starts = 250, 
Wins = 91, 
Years = new int[] { 1994, 1995, 2000, 2001, 2002, 2003, 2004 }, //冠军年
Cars = new string[] { "Benetton", "Ferrari" } 
}

制造商集合结构:

new Team() 
{ 
Name = "Ferrari", 
Years = new int[] { 1961, 1964, 1975, 1976, 1977, 1979, 1982, 1983, 1999, 2000, 2001, 2002, 2003, 2004, 2007 } //冠军年
}

 

private static void Join()
        {
            var racers = from r in Formula1.GetChampions()
                         from y in r.Years  //获得车手中的年份集合
                         where y > 2003  //判断年份
                         select new { Year = y, Name = r.FirstName + " " + r.LastName }; //匿名对象定义,年份和名字是集合
            var teams = from t in Formula1.GetContructorChampions()
                        from y in t.Years
                        where y > 2003
                        select new { Year = y, Name = t.Name }; //获得冠军年集合及制造商名字

有了这两个查询,再通过子句join t in teams on r.Year equals t.Year,根据赛手获得冠军的年份和制造商获得冠军的年份进行连接。

            var racersAndTeams = from r in racers
                                 join t in teams on r.Year equals t.Year   //和SQL的形式完全一样
                                 select new { Year = r.Year, Racer = r.Name, Team = t.Name };
                                 //select 子句定义了一个新的匿名类型,它包含Year、Racer 和Team 属性。



            Console.WriteLine("Year  Champion             Constructor Title");
            foreach (var item in racersAndTeams)
            {
                Console.WriteLine("{0}: {1,-20} {2}", item.Year, item.Racer, item.Team);
            }
        }
当然,也可以把它们合并为一个LINQ 查询,但这只是一种尝试:
 
private static void Join()
        {

            int year = 2003;
            var racersAndTeams = from r in
                                     from r1 in Formula1.GetChampions()
                                     from yr in r1.Years
                                     where yr > year
                                     select new { Year = yr, Name = r1.FirstName + " " + r1.LastName }
                                 join t in
                                     from t1 in Formula1.GetContructorChampions()
                                     from yt in t1.Years
                                     where yt > year
                                     select new { Year = yt, Name = t1.Name }
                                 on r.Year equals t.Year
                                 select new { Year = r.Year, Racer = r.Name, Team = t.Name };


            Console.WriteLine("Year  Champion             Constructor Title");
            foreach (var item in racersAndTeams)
            {
                Console.WriteLine("{0}: {1,-20} {2}", item.Year, item.Racer, item.Team);
            }
        }
 
结果如下:
 
 
image 
分享到:
评论

相关推荐

    linq标准查询操作符

    LINQ标准查询操作符LINQ标准查询操作符LINQ标准查询操作符LINQ标准查询操作符

    LINQ标准查询操作符[收集].pdf

    LINQ标准查询操作符[收集].pdf

    LINQ 的标准查询操作符

    语言集成查询 (LINQ) ...除强类型化语法外,LINQ 查询还具有一个标准查询操作符库来增强其功能。这些标准查询操作符对序列进行运算并可执行各种运算,如确定序列中是否存在某个值以及对序列运行合计函数(如求和)。

    LINQ标准查询操作符(pdf中文版)---通俗易懂

    LINQ标准查询操作符,对linq的扩展方法作了非常详细的描述,配合了,相当好懂的例子。非常不错,我已经看完了,5星推荐。

    LINQ的标准查询操作符

    语言集成查询(LINQ)允许开发人员通过类型化语法使用Micrisoft.net Framework3.5代码编写类似SQL的查询.....(本资料使用LINQ来执行实际的查询和运算)

    LINQ标准查询操作符.pdf

    Linq 查询语法,作者收集的很详细并配有简单的实例。pdf格式

    VB.NET LINQ各项查询操作示例

    这是accessoft上,作者:煮江品茶 写的一个...摘 要:【VB.NET小品】LINQ标准操作符示例 正 文: LINQ是VS中的一个通用的数据查询技术,该技术简化了对SQL、XML等数据的查询。本示例介绍LINQ的标准查询符的使用方法。

    LINQ 标准查询操作符

    本文介绍了LINQ标准查询操作符。没有这些操作符,LINQ就不会存在。本文为理解这些操作符的功能提供了很好的基础。了解它们将会很有帮助,因为LINQ的各种Provider都是基于这些操作符来完成各自丰富的功能。

    Linq之Join操作实例

    通过一个简单的实例对Linq中的Join操作进行演示。

    Linq to datable(Left join right join full join)实例

    LINQ to datable实现Left join right join full join VB2010源码

    LinQ(Language Integrated Query)体验

    LINQ定义了一组标准查询操作符用于在所有基于.NET平台的编程语言中更加直接地声明跨越、过滤和投射操作的统一方式,标准查询操作符允许查询作用于所有基于IEnumerable接口的源,并且它还允许适合于目标域或技术的第...

    C#编程 数据库操作应用 LINQJoin(源码)(源码)

    C#编程 数据库操作应用 LINQJoin(源码)(源码)C#编程 数据库操作应用 LINQJoin(源码)(源码)C#编程 数据库操作应用 LINQJoin(源码)(源码)C#编程 数据库操作应用 LINQJoin(源码)(源码)C#编程 数据库操作应用 LINQJoin...

    Linq操作符27个常用说明.docx

    Linq操作符27个常用说明,对Linq to OBJECT进行了详细说明,包括Where,Select,SelectMany,Take,TakeWhile,Skip,SkipWhile,Concat,OrderBy,OrderByDescending,ThenBy等

    LINQ简要技术~~~

    2.6. 连接操作符 4 2.7. 集合操作符 6 2.8. 转换操作符 6 2.9. 元素操作符 7 2.10. 生成操作符 7 第3章 非延迟操作符 8 3.1. 转换操作符 8 3.2. 相等操作符 9 3.3. 元素操作符 9 3.4. 量词操作符 9 3.5. 聚合操作符 ...

    LINQ 实战 7/11

    2.5.2 更多使用LINQ标准查询操作符的例子 50 2.5.3 将扩展方法引入到实例程序中 51 2.5.4 注意事项 52 2.6 匿名类型 54 2.6.1 使用匿名类型组合数据 55 2.6.2 没有名字的类型也是类型 55 2.6.3 使用...

    linq 简单查询,分页

    linq简单查询,可实现分页,linq to sql

    新技术讲座LINQ复杂查询 (学习资料带例子)

    新技术讲座LINQ复杂查询 (学习资料带例子) LINQ复杂查询 Linq

    linq 简单查询示例

    linq 简单查询示例,union,select,from,where,contact

Global site tag (gtag.js) - Google Analytics