我想从@where获取数据库中的所有记录,然后更新它们.为此,我创建了一个这样的查询:
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);
});
}
Run Code Online (Sandbox Code Playgroud)
但是此查询选择数据库中的所有字段并不好.为了解决这个问题我尽量选择像刚才特定字段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);
});
}
Run Code Online (Sandbox Code Playgroud)
但它返回此错误:
无法在LINQ to Entities查询中构造实体或复杂类型"DataLayer.Context.WorkOrder".
我看过类似的帖子和同样的错误,但我的问题不同,因为我想更新.
我怎样才能做到这一点?
我有一个QWidget,我想在另一个QWidget上使用Dialog.
我想要做的是一个简单的"请等待yadda yadda ......"对话框,没有按钮.
代码部分如下:
void NewWindow::on_combobox_New_currentIndexChanged(int index) //slot function
{
QWidget* box = new QWidget();
box->setWindowModality(Qt::ApplicationModal);
box->setWindowTitle("Wait...");
QHBoxLayout* layout = new QHBoxLayout();
box->setLayout(layout);
QLabel* lbl = new QLabel();
lbl->setText("Loading...");
layout->addWidget(lbl);
box->show();
for (int var = 0; var < st.size(); ++var)
{
//Some heavy lifting here
}
box->close();
}
Run Code Online (Sandbox Code Playgroud)
通常情况下,我希望这个对话框显示正确的文本,并在循环结束后消失.实际上它也是这样,但有一点不同:标签不显示.小部件看起来是空的.然后消失.
如果我将代码复制到另一个区域(例如,复制到MainWindow构造函数),它将正确显示其中的消息.
我感觉循环阻止了绘制操作,但是小部件本身也应该丢失.为什么只有标签才能让我望而却步.
感谢您的任何见解.