我曾寫過一個EF批量更新、刪除的博客,后來操作的過程中經常遇到更新字段,但是要在原來的基礎上計算的情況,我就先去獲取一遍數據然后再計算,最后再去更新,顯然這個操作是很復雜的
var guest = dbContext.Guest.Where(g => g.ID == ID); if (guest.FirstOrDefault() != null) { var balance = guest.FirstOrDefault().Balance + price; guest.Update(g => new Guest { Balance = balance }); }
經過分析我發現在update針對的對象時where 查詢出來的,那我就可以操作查詢出來的東西,並且在update 的時候也有e ,Lambda 的簡寫用的多了都忘記了它本身復雜情況的語法了,明白了之后那就很簡單了,我可以直接操作e.money
public void TextForZK() { using (var dbContext = new FMDbContext()) { //更新e.money dbContext.Expenditure.Where(e => e.ID == 1).Update(e => new Expenditure { Money = e.Money + 1 }); } }
細思極恐 ,想一想 "Lambda表達式"是一個匿名函數,是一種高效的類似於函數式編程的表達式
Lambda簡化了匿名委托的使用,減少開發中需要編寫的代碼量。
具體內容:它可以包含表達式和語句,並且可用於創建委托或表達式目錄樹類型,支持帶有可綁定到委托或表達式樹的輸入參數的內聯表達式。
寫法:所有Lambda表達式都使用Lambda運算符=>,該運算符讀作"goes to"。Lambda運算符的左邊是輸入參數(如果有),右邊是表達式或語句塊。Lambda表達式x => x * x讀作"x goes to x times x"。
簡單介紹一下方便理解
利用委托處理方法:
//委托 逛超市 delegate int GuangChaoshi(int a); static void Main(string[] args) { GuangChaoshi gwl = JieZhang; Console.WriteLine(gwl(10) + ""); //打印20,委托的應用 Console.ReadKey(); } //結賬 public static int JieZhang(int a) { return a + 10; }
利用lambda表達式處理方法:
//委托 逛超市 delegate int GuangChaoshi(int a); static void Main(string[] args) { // GuangChaoshi gwl = JieZhang; GuangChaoshi gwl = p => p + 10; Console.WriteLine(gwl(10) + ""); //打印20,表達式的應用 Console.ReadKey(); }
是不是理解了,哈哈哈,我對自己無語了,想想以前寫的代碼,感覺自己弱爆了!