Как условно SetProperty с помощью Entity Framework Core ExecuteUpdate?C#

Место общения программистов C#
Ответить
Anonymous
 Как условно SetProperty с помощью Entity Framework Core ExecuteUpdate?

Сообщение Anonymous »

При запросе к базе данных с помощью EF Core можно легко условно добавить в запрос предложения .Where перед его выполнением, например:

Код: Выделить всё

[HttpGet]
public async Task GetEntitiesAsync(string? property1, string? property2)
{
var query = _context.Entities.AsNoTracking();
if (property1 != null)
{
query = query.Where(e => e.Property1.Contains(property1));
}
if (property2 != null)
{
query = query.Where(e => e.Property2.Contains(property2));
}
return await query.ToListAsync();
}
Однако при использовании .ExecuteUpdate я не понимаю, как можно условно связать предложения .SetProperty:

Код: Выделить всё

[HttpPatch("{id}")]
public async Task UpdateEntityAsync(int id, Entity entity)
{
var entitiesUpdated = await _context.Entities
.Where(e => e.Id == id)
.ExecuteUpdateAsync(s => s
// How to conditionally chain SetProperty based on
// if entity.Property1 and entity.Property2 are null?
.SetProperty(e => e.Property1, entity.Property1)
.SetProperty(e => e.Property2, entity.Property2)
);

return entitiesUpdated == 1 ? NoContent() : NotFound();
}
Вы не можете использовать операторы if внутри лямбды. Это должно быть одно выражение, результатом которого будет SetPropertyCalls. Возможно, вы могли бы вручную создать дерево выражений, но не нужно ли строить его поверх параметра, переданного в лямбду? Есть ли простой способ, которого я не вижу?

Подробнее здесь: https://stackoverflow.com/questions/759 ... cuteupdate
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»