Linq表示式和Lambda表示式用法對比
什麼是Linq表示式?什麼是Lambda表示式?
前一段時間用到這個只是,在網上也沒找到比較簡單明瞭的方法,今天就整理了一下相關知識,有空了再仔細研究研究
public Program() { List<Student> allStudent = new List<Student> { new Student("張三",23), new Student("李四",29), new Student("王二",25), new Student("趙六",26) }; //Ling表示式 var stus1 = from s in allStudent wheres.Name == "王二" select new { s.Name, s.Age }; //Lanmbda表示式 var stus2 = allStudent.Where(t => t.Name == "王二").Select(t => new { t.Name, t.Age }); } public class Student { public string Name { set; get; } public int Age { set; get; } public Student(string name, int age) { this.Name = name;this.Age = age; } } Lambda確實比Linq表示式更加優雅 Linq表示式的select不能省略 //Linq var students1 = from t in db.Students where t.Name == "張三" select t; //Lambda var students2 = db.Students .Where(t => t.Name == "張三"); Linq表示式必須需要括號包裹起來才能取結果集 //Linq var students1 = (from t in db.Students where t.Name == "張三" select t).ToList(); //Lambda var students2 = db.Students .Where(t => t.Name == "張三") .ToList();
什麼時候使用Linq?
通過上面的對比,好像Linq一文不值了。no,不是這樣的。
比如下面幾種情況我們就可以選擇使用Linq:
例一:(本例適用於Linq to Object 和 沒有建主外來鍵的EF查詢)
Lambda中的Join需要傳四個引數表示式,是不是有點暈了。。。
var list1 = new Dictionary<string, string> { { "1", "張三" }, { "2", "李四" }, { "3", "張三" }, { "4", "張三" } }; var list2 = new Dictionary<string, string> { { "1", "張三" }, { "2", "李四" }, { "3", "李四" }, { "4", "張三" } }; //Linq var obj1 = from l1 in list1 join l2 in list2 on l1.Key equals l2.Key select new { l1, l2 }; //Lambda var obj = list1.Join(list2, l1 => l1.Key, l2 => l2.Key, (l1, l2) => new { l1, l2 });
例二:
Lambda需要區分OrderBy、ThenBy有沒有覺得麻煩
//Linq var obj1 = from l1 in list1 join l2 in list2 on l1.Key equals l2.Key orderby l1.Key, l2.Key descending select new { l1, l2 }; //Lambda var obj = list1.Join(list2, l1 => l1.Key, l2 => l2.Key, (l1, l2) => new { l1, l2 }) .OrderBy(li => li.l1.Key) .ThenByDescending(li => li.l2.Key) .Select(t => new { t.l1, t.l2 });
總覺得Linq更多的只是為了照顧那些寫慣了sql的程式設計師。
聯接查詢(內聯、左聯、交叉聯)
關於聯接查詢使用Linq會更合適一些這個上面已經說了。
接下來我們寫內聯、左聯、交叉聯的Linq和對應的Lambda程式碼。(目的:可能有些人不會,同時在這裡也給自己做個備忘)
內聯:
var list1 = new Dictionary<string, string> { { "1", "張三" }, { "2", "李四" }, { "3", "張三" }, { "4", "張三" } }; var list2 = new Dictionary<string, string> { { "1", "張三" }, { "2", "李四" }, { "3", "李四" }, { "4", "張三" } }; //Linq查詢 var ojb2 = (from l1 in list1 join l2 in list2 on l1.Key equals l2.Key select new { l1, l2 }).ToList(); //Lambda查詢 var obj = list1.Join(list2, l1 => l1.Key, l2 => l2.Key, (l1, l2) => new { l1, l2 }).ToList();
左聯:
var list1 = new Dictionary<string, string> { { "1", "張三" }, { "2", "李四" }, { "3", "張三" }, { "4", "張三" } }; var list2 = new Dictionary<string, string> { { "1", "張三" }, { "2", "李四" }, { "3", "李四" }, { "4", "張三" } }; //Linq查詢 var ojb2 = (from l1 in list1 join l2 in list2 on l1.Key equals l2.Key into list from l2 in list.DefaultIfEmpty() select new { l1, l2 }).ToList(); //Lambda查詢 var obj = list1.GroupJoin(list2, l1 => l1.Key, l2 => l2.Key, (l1, l2) => new { l1, l2=l2.FirstOrDefault() }).ToList();
交叉聯:
var list1 = new Dictionary<string, string> { { "1", "張三" }, { "2", "李四" }, { "3", "張三" }, { "4", "張三" } }; var list2 = new Dictionary<string, string> { { "1", "張三" }, { "2", "李四" }, { "3", "李四" }, { "4", "張三" } }; //Linq查詢 var ojb2 = (from l1 in list1 from l2 in list2 select new { l1, l2 }).ToList(); //Lambda查詢 var obj = list1.SelectMany(l1 => list2.Select(l2 => new { l1,l2})).ToList();
FROM :http://www.cnblogs.com/zhaopei/p/5746414.html
相關推薦
【C#】Linq表示式和Lambda表示式用法對比
什麼是Linq表示式?什麼是Lambda表示式? 前一段時間用到這個只是,在網上也沒找到比較簡單明瞭的方法,今天就整理了一下相關知識,有空了再仔細研究研究 using System; using System.Collections.Generic; using S
Linq表示式和Lambda表示式用法對比
什麼是Linq表示式?什麼是Lambda表示式?前一段時間用到這個只是,在網上也沒找到比較簡單明瞭的方法,今天就整理了一下相關知識,有空了再仔細研究研究 public Program() { List<Student> allStudent = new List<Student&g
[.net core自我修煉2]SQL、LINQ和Lambda表示式
隨便說說 自己想到什麼就記錄下來了,都是自己遇到的技術點,湊合看吧。在寫後端的時候,最常用的是Lambda表示式,這就記錄一下SQL、LINQ和Lambda的不同之處。 參考資料:https://blog.csdn.net/u010926964/article/details/46240
c++ 11 陣列 和lambda表示式 語法 / 函式包裝器 基本用法
//倒敘遍歷陣列並輸出 // []裡面的變數可以當做返回值來理解 (int x) 這裡就是每次迭代器的值,也就是陣列的元素的值 void main() { array<int, 5>
關於LINQ 和lambda表示式
一LINQ : 既可以實現過濾資料(和lambda一樣)也可以實現查詢其他型別資料的功能 LINQ表示式的from行可以巢狀 實現表多層關聯一層層向下找的目的 (注意一對一還是一對多的對應關係 容易亂 別把上層過濾掉的內容又關聯回來了) 過濾完要ToList
C# 中使用Linq和Lambda表示式對List進行排序
C#中List<T>排序的兩種方法 List<Student> stu = (List<Student>)Session["StudentList"]; Lin
執行緒池和lambda表示式
執行緒池1.什麼是執行緒池.一個用來建立和管理執行緒的容器;2.執行緒池的作用.提高執行緒的複用性,降低資源消耗提高執行緒的響應速度,提高執行緒的可管理性3.執行緒的核心思想;執行緒的複用 4.執行緒池的建立ExecutorService pools = Executors.newFixedThreadPoo
18.Java語言執行緒池和Lambda表示式
執行緒等待喚醒機制 1.執行緒間的通訊: 一個程式完成某個任務,需要多個執行緒協調,就需要執行緒之間存在“通訊”,比如生產者和消費者,只有生產了才能被消費。當生產者生產完成才能告知消費者可以消費,那麼告知的過程就是執行緒間的通訊。 2.等待與喚醒機制:
匿名內部類和lambda表示式
以下內容為筆者在學習過程中對相關知識點的理解和實踐的記錄,如有謬誤,還請指出。 一、匿名內部類:我看到很多人有提到“匿名內部類是沒有名字的類”,個人覺得用陳國君主編的《Java程式設計基礎(第五版)》中的 “所謂匿名內部類,是指可以利用內部類建立沒有名稱的物件,它一步完成了
Collections.sort()方法和lambda表示式結合實現集合的排序
1.使用Collections.sort()實現集合的排序,這裡的方法具體指的是: Collections.sort(List list, Compatator c) 第一個引數:為要進行排序的集合。 第二個引數:Compatator的實現,指定排序的方式。 2
Java8新特性 利用流和Lambda表示式對List集合進行處理
Lambda表示式處理List 最近在做專案的過程中經常會接觸到 lambda 表示式,隨後發現它基本上可以替代所有 for 迴圈,包括增強for迴圈。也就是我認為,絕大部分的for迴圈都可以用 lambda 表示式改寫。 lambda表示式有它自己的優點:(1)簡潔,(2)易平行計算。尤其適用於遍歷結果
Java:匿名內部類和Lambda表示式
在JDK8之前,將行為抽象化作為引數傳遞給某個物件方法並進行回撥,需要定義一個實現相關介面的型別,如果該型別只需要使用一次,則可通過匿名內部類實現。 在借鑑了C#和Scala後,JDK8引入Lambda表示式,通過減少不必要的模版程式碼,簡化了傳遞抽象化行為程式碼的方式。
JAVA8 匿名內部類和lambda表示式
一.匿名內部類 匿名內部類適合建立那種只需要一次使用的類,例如前面介紹命令模式時所需要的Command物件,匿名內部類的語法有點奇怪,建立匿名內部類時會立即建立一個該類的例項,這個類的定義立即消失,匿名內部類不能重複使用。 語法格式一般如下: new 實現介面(
Python中的enumerate函式和lambda表示式
Python中的enumerate函式和lambda表示式 Python enumerate()函式 功能:enumerate() 函式用於將一個可遍歷的資料物件(如列表、元組或字串)組合為一個索引序列,同時列出資料和資料下標,一般用在 for 迴圈當中。 語法 enumer
C#中非同步匿名委託和Lambda表示式
C#中async/await真的是大大簡化了非同步程式的編寫,但往往我們可能忽略了非同步匿名委託和Lambda表示式。直接上程式碼:class Program { static void Main(string[] args) { Func&l
從編譯過程看內部類和lambda表示式
什麼是內部類 內部類按名稱分為:匿名內部類,和非匿名內部類。 非匿名內部類又分為:靜態內部類和非靜態內部類。 有時候我們會發現,修改外部類的某個方法使得它訪問了內部類的某個方法,編譯之後就會發現位元組碼中會多出來一個額外的方法,所以為了瞭解原理,還是要看看
c#委託和lambda表示式(二)
Lambda表示式 Lambda表示式是一種可用於建立委託或表示式目錄樹型別的匿名函式。通過使用Lambda表示式,可以寫入可作為引數傳遞或作為函式呼叫值返回的本地函式。 若要建立Lambda表示式,需要在Lambda運算子=>左側輸入引數(如果有),
python學習中的reduce()函式和lambda表示式
reduce()函式和lambda表示式常常能夠言簡意賅的表達我們想要的公式,但是問題也隨之而來:即表示式嚐嚐難以捉摸,看似高深莫測。這裡,我們簡單地探討一下這兩個表示式。如果後續學習中再次遇到這個問題,會繼續補充。同時,也懇請博友指教和補充,大家共同進步。 首
c#委託和lambda表示式(一)
如何使用委託 委託是安全封裝方法的型別,類似於c和c++中的函式指標。與c函式指標不同的是,委託是面向物件的、型別安全的和可靠的。委託型別是由委託的名稱確定。以下是宣告名為Del的委託,該委託可以封裝採用字串作為引數並返回void的方法: public
委託、匿名委託和lambda表示式
1、委託 在.NET中,委託有點類似於C/C++中的函式指標,但與指標不同的是,委託是一種安全的型別,那麼我們就以實現兩個數的差為例,先宣告一個成員方法: publicint CompareTwoValue(int a, int b){ int c=a-b;