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

LINQ 标准的查询操作符 过滤 where、index1、OfType

阅读更多

LINQ 查询为最常用的操作符定义了一个声明语法。还有许多标准查询操作符

下面是 LINQ  定义的标准查询操作符。

image

 

image

image

下面开始学习这些查询

添加Using

using System.Linq;
using System.Linq.Expressions;

 

过滤

使用 Where  子句,可以合并多个表达式。例如,找出赢得至少 15  场比赛的巴西和奥地利赛手。传送给
where  子句的表达式的结果类型应是 bool:

/// <summary>
        /// 过滤
        /// </summary>
        private static void SimpleFiltering()
        {
            var racers = from r in Formula1.GetChampions()
                         where r.Wins > 15 && (r.Country == "Brazil" || r.Country == "Austria")
                         select r;

            foreach (var r in racers)
            {
                Console.WriteLine("{0:A}", r);

            }
        }

 

 

并不是所有的查询都可以用 LINQ  查询完成。也不是所有的扩展方法都映射到 LINQ  查询子句上。高级
查询需要使用扩展方法。为了更好地理解带扩展方法的复杂查询,最好看看简单的查询是如何映射的。使用扩
展方法 Where()和 Select(),会生成与前面 LINQ  查询一样的结果:

/// <summary>
       /// 过滤,带扩展方法的复杂查询
       /// </summary>
       private static void SimpleFiltering()
       {
           //var racers = from r in Formula1.GetChampions()
           //             where r.Wins > 15 && (r.Country == "Brazil" || r.Country == "Austria")
           //             select r;

           var racers2 = Formula1.GetChampions().
               Where(r => r.Wins > 15 && (r.Country == "Brazil" || r.Country == "Austria")). //先计算右侧括号里面的谓词结果,做参数再计算
               Select(r => r); //谓词条件是r,也就是没有条件只传一个参数

           foreach (var r in racers2)
           {
               Console.WriteLine("{0:A}", r);

           }
       }

 

用索引来过滤

 

不能使用 LINQ 查询的一个例子是 Where()方法的重载。在 Where()方法的重载中,可以传送第二个参数—个索引。

索引是过滤器返回的每个结果的计数器(这里用index1这个变量来存放)。可以在表达式中使用这个索引(之后可以使用这个变量

,执行基于索引的计算。下面的代码由 Where()扩展方法调用,它使用索引返回姓氏以 A  开头、索引为偶数的赛手:

private static void SimpleFilteringWithIndex()
        {
            var racers = Formula1.GetChampions().Where((r, index1) => r.LastName.StartsWith("A") && index1 % 2 != 0);
            //index1 从0开始计数, 在重载的方法第二个参数为其赋值
            foreach (var r in racers)
            {
                Console.WriteLine("{0:A}", r);
            }

        }

 

类型过滤

为了进行基于类型的过滤, 可以使用OfType()扩展方法。 这里数组数据包含string  和int对象。 使用OfType()
扩展方法,把 string  类传送给泛型参数,就从集合中返回字符串:

private static void TypeFiltering()
        {
            object[] data = { "one", 2, 3, "four", "five", 6 };
            var query = data.OfType<string>();

            foreach (var s in query)
            {
                Console.WriteLine(s);
            }
        }

模糊过滤

相当于SQL语句中的Like where r.Name.Contains(queryPara)

protected void btnSelect_Click(object sender, EventArgs e)
        {

            string queryPara = txtName.Text;

            List<MyData> query = cacheManager.GetData(KEYNAME) as List<MyData>;
            if (null == query)
            {
                //条件调用数据库
                query = new List<MyData>
                { 

                new MyData(){ Age=1, Color="New Yellow", Name="New China"},
                new MyData{ Age=2,Color="New Black",Name="New USA"}
                };
                Response.Write("读取数据库<br />");
                //缓存
                cacheManager.Add(KEYNAME, query);

            }
            else
            {

                List<MyData> filter = (from r in query
                                       where r.Name.Contains(queryPara)
                                       select r).ToList();

                //如果这里从缓存中查出来的数据不为空但是却不正确(数量少,更新,添加)
                if (filter.Count == 0)
                {
                    //如果结果等于空一定是查数据库
                    List<MyData> addQuery = new List<MyData>
                            { 
                            new MyData(){ Age=1000, Color="New Green", Name=queryPara},
                            
                            };
                    Response.Write("读取数据库<br />");
                    query.AddRange(addQuery);
                    //缓存
                    cacheManager.Add(KEYNAME, query);

                    query = addQuery;
                }
                else //筛选到结果则为结果
                {
                    query = filter;

                }

            }

            foreach (MyData q in query)
            {

                Response.Write(q.Name + "<br />");
            }


        }
分享到:
评论

相关推荐

    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(Language Integrated Query)体验

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

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

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

    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 简单查询示例,union,select,from,where,contact

    LINQ简要技术~~~

    第5章 LINQ到XML操作符 16 5.1 Ancestors和AncestorsAndSelf操作符 16 5.2 Attributes操作符 16 5.3 Nodes、DescendantNodes和DescendantNodesAndSelf操作符 16 5.4 Descendants、Elements和DescendantsAndSelf操作...

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

    Linq高级编程

    语言集成查询是一系列标准查询操作符的集合,这些操作符几乎对每一种数据源的导航、过滤和执行操作都提供了底层的基本查询架构。Linq 可查询的数据源包括XML(可使用LINQ to XML)、关系数据(使用LINQ to SQL)、...

Global site tag (gtag.js) - Google Analytics