<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
LINQ,全稱是Language-INtegrated Query(整合語言查詢),是.NET語言中查詢資料的一種技術。LINQ to Entities是一種機制,它促進了使用LINQ對概念模型的查詢。
因為LINQ是宣告式語言,它讓我們聚焦於我們需要什麼資料而不是應該如何檢索資料。LINQ to Entities在實體資料模型之上提供了一個很好的抽象,所以我們可以使用LINQ來指定檢索什麼資料,然後LINQ to Entities provider會處理存取資料庫事宜,併為我們取到必要的資料。
當我們使用LINQ to Entities對實體資料模型執行LINQ查詢時,這些LINQ查詢會首先被編譯以決定我們需要獲取什麼資料,然後執行編譯後的語句,從應用程式的角度看,最終會返回.NET理解的CLR物件。
上圖展示了LINQ to Entities依賴EntityClient才能夠使用EF的概念資料模型
執行流程:
1、應用程式建立一個LINQ查詢。
2、LINQ to Entities會將該LINQ查詢轉換成EntityClient命令。
3、EntityClient命令然後使用EF和實體資料模型將這些命令轉換成SQL查詢。
4、然後會使用底層的ADO.NET provider將該SQL查詢傳入資料庫。
5、該查詢然後在資料庫中執行。
6、執行結果返回給EF。
7、EF然後將返回的結果轉換成CLR型別,比如領域實體。
8、EntityClient使用專案,並返回必要的結果給應用程式。
使用LINQ查詢的方式有兩種:
1、查詢語法。
2、方法語法。
選擇哪種語法完全取決於你的習慣,兩種語法的效能是一樣的。查詢語法相對更容易理解,但是靈活性稍差;相反,方法語法理解起來有點困難,但是提供了更強大的靈活性。使用方法語法可以進行連結多個查詢,因此在單個語句中可以實現最大的結果。
下面以一個簡單的例子來理解一下這兩種方法的區別。建立一個控制檯程式,並命名。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LINQDemo.Model { public class Book { public int Id { get; set; } public string Name { get; set; } public string Author { get; set; } public DateTime PublicationDate { get; set; } } }
using LINQDemo.Model; using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LINQDemo.EF { public class SeedingDataInitializer : DropCreateDatabaseAlways<Context> { /// <summary> /// 初始化種子資料 /// </summary> /// <param name="context"></param> protected override void Seed(Context context) { context.Books.Add(new Book { Name = "C#高階程式設計(第十版)", Author = "小明", PublicationDate = Convert.ToDateTime("2017-12-11 12:12:45") }); context.Books.Add(new Book { Name = "oracle從入門到精通", Author = "張三", PublicationDate = Convert.ToDateTime("2015-12-11 12:12:45") }); context.Books.Add(new Book { Name = "JavaScript高階程式設計", Author = "李四", PublicationDate = Convert.ToDateTime("2011-09-11 12:12:45") }); base.Seed(context); } } }
using LINQDemo.Model; using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LINQDemo.EF { public class Context :DbContext { public Context() : base("AppConnection") { Database.SetInitializer<Context>(new SeedingDataInitializer()); } // 新增到資料上下文 public virtual DbSet<Book> Books { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { // 設定生成的表名:Book modelBuilder.Entity<Book>().ToTable("Book"); base.OnModelCreating(modelBuilder); } } }
using LINQDemo.EF; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LINQDemo { class Program { static void Main(string[] args) { using (var context = new Context()) { #region 查詢語法 var result = from p in context.Books where p.Name.Equals("JavaScript高階程式設計") select p; #endregion #region 方法語法 var books = context.Books.Where(p => p.Name.Equals("JavaScript高階程式設計")); foreach (var item in books) { Console.WriteLine(string.Format("書名:{0},作者:{1},釋出時間:{2}", item.Name, item.Author, item.PublicationDate)); } #endregion } Console.WriteLine("完成"); Console.ReadKey(); } } }
檢視資料庫結果:
查詢語法和方法語法的執行結果都是一樣的。
重點理解:
當使用LINQ to Entities時,理解何時使用IEnumerable和IQueryable很重要。如果使用了IEnumerable,查詢會立即執行,如果使用了IQueryable,直到應用程式請求查詢結果的列舉時才會執行查詢,也就是查詢延遲執行了,延遲到的時間點是列舉查詢結果時。
如何決定使用IEnumerable還是IQueryable呢?使用IQueryable會讓你有機會建立一個使用多條語句的複雜LINQ查詢,而不需要每條查詢語句都對資料庫執行查詢。該查詢只有在最終的LINQ查詢要求列舉時才會執行。
到此這篇關於Entity Framework使用LINQ操作實體的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45