在数组中使用 属性 查找模型的最佳方法
Best way to find model with property in array
我有一个从 db 获得的数组:
public class Employee
{
public long Id { get; set; }
public string EmployeeId { get; set; }
}
我通过简单的查询从数据库中得到:
Employee[] employee =
await this.unitOfWork.Employees
.Where(x => x.Id = id && (x.EmployeeId == employeeId && x.EmployeeId == "-1"))
.ToArrayAsync(cancellationToken);
对于这个 x.Id 一个可以有多个具有 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 然后我需要 return 这个模型
或者我需要 return 具有默认 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 条件
如果默认情况下 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();
正如您提到的,您的代码正在运行并且需要做一些更好的事情。
你可以改变这一切:
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");
我有一个从 db 获得的数组:
public class Employee
{
public long Id { get; set; }
public string EmployeeId { get; set; }
}
我通过简单的查询从数据库中得到:
Employee[] employee =
await this.unitOfWork.Employees
.Where(x => x.Id = id && (x.EmployeeId == employeeId && x.EmployeeId == "-1"))
.ToArrayAsync(cancellationToken);
对于这个 x.Id 一个可以有多个具有 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 然后我需要 return 这个模型 或者我需要 return 具有默认 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 条件
如果默认情况下 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();
正如您提到的,您的代码正在运行并且需要做一些更好的事情。
你可以改变这一切:
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");