我有一個從 db 獲得的陣列:
public class Employee
{
public long Id { get; set; }
public string EmployeeId { get; set; }
}
我通過簡單的查詢從 db 得到:
Employee[] employee =
await this.unitOfWork.Employees
.Where(x => x.Id = id && (x.EmployeeId == employeeId && x.EmployeeId == "-1"))
.ToArrayAsync(cancellationToken);
對于這個 x.Id a 可以有許多具有 EmployeeId 的模型。例如:
Employee[] employees = new Employee[]
{
new()
{
Id = 1,
EmployeeId = "5ee62bf9-a248-49e0-b828-c83eb4128ba1"
},
new()
{
Id = 1,
EmployeeId = "f361fa2b-1749-4905-9f2f-0a167d66befc"
},
new()
{
Id = 1,
EmployeeId = "-1"
}
};
EmployeeId = "-1" 默認用戶
然后我需要檢查是否找到輸入的employeeId,然后我需要回傳這個模型,或者我需要回傳默認EmployeeId =“-1”的模型。
if (employee.Length > 0)
{
int index = Array.FindIndex(employee, x => x.EmployeeId.Equals(employeeId));
if (index > 0)
{
return employee[index]);
}
index = Array.FindIndex(employee, x => x.EmployeeId == "-1");
if (index > 0)
{
return return employee[index]);
}
}
最好的方法是什么?此代碼有效,但我看到有很多 if 條件
uj5u.com熱心網友回復:
如果默認的employeeId始終為-1,則無需從資料庫中獲取它(在我看來)。
順便說一句,解決方案是使用FirstOrDefault默認值,如下所示:
Employee[] employee =
await this.unitOfWork.Employees
.Where(x => x.Id = id && (x.EmployeeId == employeeId || x.EmployeeId==-1))
.ToArrayAsync(cancellationToken);
return employee.FirstOrDefault(x=>x?.EmployeeId==employeeId , employee.FirstOrDefault());
//for pre .net 6 use this
return employee.FirstOrDefault(x=>x?.EmployeeId==employeeId) ?? employee.FirstOrDefault();
uj5u.com熱心網友回復:
正如您所提到的,您的代碼正在運行,需要做一些更好的事情。
你可以改變這一切:
if (employee.Length > 0)
{
int index = Array.FindIndex(employee, x => x.EmployeeId.Equals(employeeId));
if (index > 0)
{
return employee[index]);
}
index = Array.FindIndex(employee, x => x.EmployeeId == "-1");
if (index > 0)
{
return return employee[index]);
}
}
像這樣:
return employee.FirstOrDefault(e => e.EmployeeId == employeeId) ??
employee.FirstOrDefault(e => e.EmployeeId == "-1");
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/455890.html
上一篇:使用C#10和.NET6字串插值將byte[]或ReadOnlySpan<byte>格式化為字串,編譯器處理程式降低模式
