最近比較 lambda ,linq ,sql 哪個好?
同樣是要操作兩張表,
目的要將 bill 與 employee 不同的資料寫入 employee,
結果發現一向好操作的 lambda 居然要寫這麼大坨。
看來 sql 還是有它方便的地方。
Lambda:
using (var smsDb = new smsEntities())
{
var billAcpdIdList = smsDb.SMS_Bill
.Select(item => item.ACPD_ID)
.ToList();
using (var cecDb = new Entities())
{
var employeeList = cecDb.EMPLOYEE
.Where(item =>
!item.EMP_ID.Contains("emp"))
.Where(item => !billAcpdIdList.Contains(item.EMP_ID))
.Select(item => new SMS_Bill
{
ACPD_ID = item.EMP_ID
})
.ToList();
}
}
LinQ:
using (var smsDb = new smsEntities())
{
using (var cecDb = new Entities())
{
var list =
(from employee in cecDb.EMPLOYEE
where !SqlMethods.Like(employee.EMP_ID, "%[_]_")
&& !(from bill in smsDb.SMS_Bill
select bill.ACPD_ID).Contains(employee.EMP_ID)
select new SMS_Bill
{
ACPD_ID = employee.EMP_ID,
Account = 0,
}).ToList();
smsDb.SMS_Bill.AddRange(list);
smsDb.SaveChanges();
}
}
SQL
INSERT SMS_BILL(ACPD_ID)
SELECT EMP_ID FROM EMPLOYEE
WHERE (EMP_ID NOT LIKE '%[_]_')
AND EMP_ID NOT IN (SELECT ACPD_ID FROM SMS_BILL)
留言
張貼留言