在EF查询里都以不被帮助的,a)叁个可用于任何.NET编制程序语言的查询操作符集合

在EF查询里都是不被支持的,a)一个可用于任何.NET编程语言的查询操作符集合

重返目录

 var intermediate = from n in names
                               select new
                               {
                                   Original = n,
                                   Vowelless = Regex.Replace(n, "[aeiou]", "")
                               };
            IEnumerable<string> query = from item in intermediate
                                        where item.Vowelless.Length > 2
                                        select item.Original;

System.Data.Objects.SqlClient.SqlFunctions

1.什么是LINQ

下边我们看2个例证,这些例子涉及到了贰个遵照时间的查询

 5.into关键字

明日首要说一下,EF为日期方法留的1个后门,<后门>那一个词我们在华夏社会都应当理解了,顾名思义,就是反着标准走,你的原则对自家未曾用,哈哈!那东西有时候是可行的,因为在大的尺度下,很可能有的必要不可能完结,那时,就需求后门了!

能够改写为:

   public System.Linq.Expressions.Expression<Func<Classroom_Live, bool>> SatisfiedBy()
    {
            Specification<Classroom_Live> spec = new TrueSpecification<Classroom_Live>();

            if (_status.HasValue)
            {
                if (_status.Value == 0)
                    spec &= new DirectSpecification<Classroom_Live>(o => (o.Status & (int)Status.AuditNotPass) > 0
                        || (o.Status & (int)Status.Auditing) > 0
                        || DateTime.Now < o.BeginTime);
                else if (_status == 1)
                    spec &= new DirectSpecification<Classroom_Live>(o => (o.Status & (int)Status.AuditPass) > 0
                        && System.Data.Objects.SqlClient.SqlFunctions.DateDiff("mi", DateTime.Now, o.BeginTime) < o.Minutes);
                else
                    spec &= new DirectSpecification<Classroom_Live>(o => (o.Status & (int)Status.AuditPass) > 0
                        && System.Data.Objects.SqlClient.SqlFunctions.DateDiff("mi", DateTime.Now, o.BeginTime) > o.Minutes);
            }
            return spec.SatisfiedBy();
    }

3.LINQ 在询问目录上的施用例子

datepart 缩写
yy, yyyy
季度 qq, q
mm, m
年中的日 dy, y
dd, d
wk, ww
星期 dw, w
小时 hh
分钟 mi, n
ss, s
毫秒 ms
微妙 mcs
纳秒 ns

柒.匿名类型上边我们友好定义了系列TempProjectionItem来存放查询的结果。通过应用匿名类型,大家得以节约那种中间类型的定义,而由编写翻译器来帮我们实现:

眾所周知,在linq to
entity的查询语句中,不允许出现ef不能够辨识的要紧字,如Trim,Substring,TotalDays等.net里的重要字,在EF查询里都是不被协理的,它的缘故可能是为着更好的抓牢查询的天性吧,毕竟,好的属性取决于你的程序正式,有了1个严俊的规范,才能设计出好的先后来.

八.let关键字let关键字让我们得以在维持范围变量的还要引入新的查询变量。比如上边包车型大巴演示,我们得以用let关键字作如下改写:

string[] names = { "Tom", "Dick", "Harry", "Mary", "Jay" };
            var query = from n in names
                        let Vowelless = Regex.Replace(n, "[aeiou]", "")
                        where Vowelless.Length > 2
                        select n;   //正是因为使用了let,此时n仍然可见

let关键字非常灵活和方便,仿佛例子来看的那样。而且,大家能够行使几个let关键字,并且后边的
let表达式能够引用前一个let关键字引入的变量。

图片 1

我们只能在select和group子句前面使用into关键字,它会再度开首叁个查询,让我们能够连续引入where,
orderby和select子句。就算表面上看,我们再次创立了贰个新的查询,但当下边包车型客车询问被翻译成方泰语法时,它只是三个查询,二个链接了八个运算符的询问,所以地点的写法不会造成品质难点。

重返目录

var tempQuery = tempQueryExpr

上面是关于dataPart参数的证实,来自http://www.w3school.com.cn/sql/func\_datediff.asp

1  //linq在系统进程查询上的运用
2             var procQuery = from p in Process.GetProcesses()
3                             orderby p.WorkingSet64 descending
4                             select new { p.ProcessName, p.Id, p.WorkingSet64 };
5             ViewBag.procList = procQuery.ToList();

EF里的后门类:

var finalQuery = from … in (tempQuery)

相关资料:http://www.cnblogs.com/lifepoem/archive/2011/12/16/2288017.html

渐进式查询成立方式得以由此在二个查询中置放另三个查询来改写,那样能够把多个查询组合成单个查询,即:

 string[] names = { "Tom", "Dick", "Harry", "Mary", "Jay" };

            // 渐进式查询(Progressive query building)
            IEnumerable<string> query =
                from n in names
                select Regex.Replace(n, "[aeiou]", "");

            query = from n in query where n.Length > 2 orderby n select n;

            // 用包装查询方式进行改写(Wrapping Queries)
            IEnumerable<string> query2 =
                from n1 in
                    (
                        from n2 in names
                        select Regex.Replace(n2, "[aeiou]", "")
                    )
                where n1.Length > 2
                orderby n1
                select n1;

            // 与上面等价的方法语法
            IEnumerable<string> query3 = names
                .Select(n => Regex.Replace(n, "[aeiou]", ""))
                .Where(n => n.Length > 2)
                .OrderBy(n => n);

语言集成查询是一层层正式查询操作符的聚众,那个操作符差不多对每1种数据源的领航、过滤和施行操作都提供了底层的为主查询框架结构。Linq
 可查询的数据源包含XML(可使用LINQ to XML)、关周全据(使用LINQ to
SQL)、ADO.NET DataSets(使用 LINQ to DataSet)以及内部存储器中的数据。

6.

2.LINQ的优势

1  DirectoryInfo di = new DirectoryInfo("C:\\");
2             var dirName = from dir in di.GetDirectories()
3                            orderby dir.Name descending 
4                            select new { dir.Name };
5             ViewBag.fileList = dirName.ToList();

在大家目前查询表明式的例证中,select关键字的面世也就意味着查询的了断了。而into关键字让大家在结果投影之后还是能三番五次我们的询问,它是对分步营造查询表明式的1种简写方式。今后我们得以选取into关键字来重写上例中的查询:

肆.LINQ在查询系统中保有进度上的选拔的例证

急需注意的是,因为匿名类型的确切类型名是由编写翻译器自动发出的,因而intermediate的项目为:IEnumerable
<random-compiler-produced-name>
。大家来声称那种类型的绝无仅有办法正是利用var关键字,那时,var不只是进一步从简,而且也是不可或缺的招数。

 IEnumerable<string> query =
                    from n in names
                    select n.Replace("a", "").Replace("e", "").Replace("i", "")
                            .Replace("o", "").Replace("u", "")
                    into noVowel
                    where noVowel.Length > 2
                    orderby noVowel
                    select noVowel;   // Result: Dck, Hrry, Mry

上面三种办法以及into关键字的做事办法是同1的,编写翻译器都会把他们翻译成多少个链接查询运算符。请看上边包车型地铁演示:

var query = from … in (tempQueryExpr)

 

a)一个可用来任何.NET编制程序语言的查询操作符集合,能够应用相同种语法为数据库、XML、大概内部存款和储蓄器中的数额编写查询,同时还收获了附加的补益,即英特尔liSense和编写翻译时类型检查;