我想用@where從數據庫中獲取所有記錄,然後更新它們。要做到這一點,我創建了一個這樣的查詢:如何在EF中選擇要更新的特定字段
public async Task MarkAllAsActive()
{
var currentUserId = _userManager.GetCurrentUserId();
await _workOrders.Where(row => row.Status == WorkOrderStatus.Draft).ForEachAsync(row =>
{
row.Status = WorkOrderStatus.Active;
_uow.MarkAsChanged(row, currentUserId);
});
}
但該查詢將從這是不好的數據庫中選擇所有字段。爲了解決這個問題我儘量選擇像ID
只是具體領域,Status
:
public async Task MarkAllAsActive()
{
var currentUserId = _userManager.GetCurrentUserId();
await _workOrders.Select(row=>new WorkOrder { Id=row.Id,Status=row.Status}).Where(row => row.Status == WorkOrderStatus.Draft).ForEachAsync(row =>
{
row.Status = WorkOrderStatus.Active;
_uow.MarkAsChanged(row, currentUserId);
});
}
但這個錯誤:
The entity or complex type 'DataLayer.Context.WorkOrder' cannot be constructed in a LINQ to Entities query.
我已經看到了類似的帖子,並同樣的錯誤,但我的問題是不同的,因爲我想更新。
我該怎麼做?
嘗試'。選擇(行=>新{ID = row.Id,狀態= row.Status})',LINQ到實體允許使用匿名類型的突起。在我看來,你應該首先使用'Where'選擇需要的項目,使用'Select'。 –
@M.Wiśnicki有個問題。狀態是一個枚舉,現在我不能設置枚舉狀態,它說不能分配給 - 。因爲它的anynoumos類型 –
也添加'_uow.MarkAsChanged()'。我認爲你嘗試更新不正確的方式。 –