[英]EF update statement with select query and where cause combined
UPDATE [Revision]
SET [Value] = [Value] + 1
WHERE [Type] = 0
AND [Number] IN (SELECT [Number] FROM [User]
WHERE Id IN (5111, 5211, 5311))
如何在 EF Core 中編寫此查詢?
我試過:
var n = await db.Users
.AsNoTracking()
.Where(x => id.Contains(x.Id))
.Select(y => y.Number)
.ToListAsync(s.Token)
.ConfigureAwait(false);
await db.Revisions
.AsNoTracking()
.Where(y => y.Type == Consts.TABLE_USER && n.Contains(y.Number))
.ExecuteUpdateAsync(z =>
z.SetProperty(o => o.Value, o => o.Value + 1),
s.Token
).ConfigureAwait(false);
但作為兩次往返,它的性能並不好。
我只想編寫 EF Core 一次往返以獲得高性能。
如何在 EF Core 中編寫此查詢?
不要獲取用戶。 只需使用批量更新和批量刪除將其組合到更新查詢中,例如:
//n should be a subquery expression, not a collection
var n = db.Users
.Where(x => id.Contains(x.Id))
.Select(y => y.Number);
await db.Revisions
.Where(y => y.Type == Consts.TABLE_USER && n.Contains(y.Number))
.ExecuteUpdateAsync(z =>
z.SetProperty(o => o.Value, o => o.Value + 1),
s.Token
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.