簡體   English   中英

帶有 select 查詢和 where 原因組合的 EF 更新語句

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM