我有帶有列的資料庫:Id、DataA、DataB、DataC,并且可能有更多的資料列。我有 api 端點,我在其中傳遞 Id 和列資料名稱,我應該用當前的 UTC 時間更新這個資料列。一個請求一個 id 串列,所有 id 都使用相同的 UTC 時間更新。
...
switch (model.ColumnName)
{
case "DataA":
queriedContext.Select(x => { x.DataA = DateTime.UtcNow; return x; }).ToList();
break;
case "DataB":
queriedContext.Select(x => { x.DataB= DateTime.UtcNow; return x; }).ToList();
break;
default:
break;
}
...
是否可以在 switch 中洗掉可重復的 LINQ 并更改為智能的東西?
uj5u.com熱心網友回復:
您不應該使用 LINQ 來導致更新某些內容的副作用。LIN(Q) 是查詢一個源而不是修改它。為此使用foreach:
DateTime utcNow = DateTime.UtcNow;
foreach(var x in queriedContext)
{
switch (model.ColumnName)
{
case "DataA":
x.DataA = utcNow;
break;
case "DataB":
x.DataB = utcNow;
break;
default:
break;
}
}
您可以通過重新使用相同的操作使其“更優雅”,因為列名不會在回圈中更改,因此您不需要switch那里。因此,將其創建為(本地)方法:
Action<Data> GetUpdateDateColumn(string column, Func<DateTime> getDate)
{
switch (column)
{
case "DataA":
return x => x.DataA = getDate();
case "DataB":
return x => x.DataB = getDate();
default:
return null;
}
}
現在您可以在foreach:
DateTime utcNow = DateTime.UtcNow;
Action<Data> updateDateColumn = GetUpdateDateColumn(model.ColumnName, () => utcNow);
if(updateDateColumn == null) return; // not a valid column
foreach(Data x in queriedContext)
{
updateDateColumn(x);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/523791.html
標籤:C#林克
