什麼是Linq,什麼是Lambda表示式?他們的區別和共同點是什麼?
一、什麼是Linq,Lambda
整理自 https://www.cnblogs.com/dotnet261010/p/8278793.html
PS:下面臭長臭長的東西可以不看的,直接翻下去看程式碼更好理解
Linq:
1、面向物件與資料訪問兩個領域長期分裂,各自為政。
2、程式語言中的資料型別與資料庫中的資料型別形成兩套不同的體系,例如:
C#中字串用string資料型別表示。
SQL中字串用NVarchar/Varchar/Char資料型別表示。
3、SQL編碼體驗落後
沒有智慧感知效果。
沒有嚴格意義上的強型別和型別檢查。
4、SQL和XML都有各自的查詢語言,而物件沒有自己的查詢語言。
上面描述的問題,都可以使用LINQ解決,那麼究竟什麼是LINQ呢?
1、LINQ(Language Integrated Query)即語言整合查詢。
2、LINQ是一組語言特性和API,使得你可以使用統一的方式編寫各種查詢。用於儲存和檢索來自不同資料來源的資料,從而消除了程式語言和資料庫之間的不匹配,以及為不同型別的資料來源提供單個查詢介面。
3、LINQ總是使用物件,因此你可以使用相同的查詢語法來查詢和轉換XML、物件集合、SQL資料庫、ADO.NET資料集以及任何其他可用的LINQ提供程式格式的資料。
4、Linq從另一方面來說也有效地防止了Sql注入哈哈
LINQ主要包含以下三部分:
1、LINQ to Objects 主要負責物件的查詢。
2、LINQ to XML 主要負責XML的查詢。
3、LINQ to ADO.NET 主要負責資料庫的查詢。
LINQ to SQL
LINQ to DataSet
LINQ to Entities
Lambda表示式:
1、簡化了匿名委託的使用。
2、Lambda讓我們的程式碼更加的簡介與方便,可以方便的用Where()、Select()等擴充套件方法對集合進行篩選,組合
下面我們來舉個栗子 :
1.兩者 簡單的語法
static void Main(string[] args) { int[] scores = { 90, 71, 82, 93, 75, 81 }; //查大於80分的成績 var result = from s in scores where s > 80 select s; //Linq寫法 var result1 = scores.Where(s => s > 80); //lambda表示式寫法 } Linq基本語法: from s in 資料來源 where 條件語句 select 要查的結果 s 是隨便起的一個名字,代表這個資料來源 Lambda基本語法: 所有的lambda表示式都是用新的lambda運算子 " => ",可以叫他,“轉到”或者 “成為”。 運算子將表示式分為兩部分,左邊指定輸入引數 右邊是lambda的主體,一些篩選語句等等,可以簡單的理解為sql裡面的where條件
2.簡單的排序
static void Main(string[] args)
{
int[] scores = { 90, 71, 82, 93, 75, 81 };
//查大於80分的成績
var result = from s in scores
where s > 80
orderby s descending //倒序 正序為ascending
select s;
var result1 = scores.OrderByDescending(s=>s).Where(s => s > 80);//倒序
var result1 = scores.OrderBy(s=>s).Where(s => s > 80);//正序
}
3.簡單的函式計算
int[] scores = { 90, 71, 82, 93, 75, 82 };
//查大於80分的成績和
var result = (from s in scores
where s > 80
select s).Sum();
var result1 = scores.Where(s => s > 80).Sum();
4.分頁查詢
var result= (from r in db.Product
where r.rpId > 10
orderby r.rpId descending
select r).Skip(10).Take(10); //取第11條到第20條資料
var result1 = db.Product.OrderByDescending(p => p.rpId).Where(p => p.rpId > 10).Skip(10).Take(10).ToList();
//PS:忘了從哪看到的了,這個ToList在讀表資料時候是要寫的。另外lambda表示式跟EF很配。
5、包含,類似like ‘%%’
var ss = from r in db.Product
where r.SortsText.Contains("來源")
select r;
var ss1 = db.Product.Where(p => p.SortsText.Contains("來源")).ToList();
6、篩選欄位中不相同的值。用於查詢不重複的結果集
int[] scores = { 90, 71, 82, 93, 75, 90 };
var result = (from s in scores
where s > 80
select s).Distinct();
var result1 = scores.Distinct().Where(s => s > 80);
7、分組
var sums2 = from emp in empList
group emp by new { emp.Age, emp.Sex } into g
select new { Peo = g.Key, Count = g.Count() };
var sums = empList
.GroupBy(x => new { x.Age, x.Sex })
.Select(group => new {
Peo = group.Key, Count = group.Count()
});
8、連線查詢
var ss = from p in db.Product
join s in db.ShoppingCart on p.Id equals s.pId
select r;
var ss1 = db.Product.Join(db.ShoppingCart , p => p.Id, r => r.pid, (p, r) => p).ToList();
//3