pyt*_*hon 15 c# linq entity-framework
我真正的应用程序问题看起来如下所示
Employee empl = new Employee(397947, "David", "Redson", 80000);
employees.Add(empl);
employees.Add(new Employee(174966, "Alfred", "Swanson", 50000));
employees.Add(new Employee(848024, "Alima", "Bieyrou", 40000));
employees.Add(new Employee(number: 397462, fName: "Robert",
lName: "Nants", salary: 30000));
string s = employees.Where(a => a.EmployeeNumber == 20000).FirstOrDefault().FirstName;
Run Code Online (Sandbox Code Playgroud)
当我使用FirstOrDefault时,它在没有匹配记录时抛出错误.如果有匹配的记录,我想返回值,否则它可以为null或空.
Har*_*lse 28
在FirstOrDefault之前选择linq语句中的字符串,然后获取字符串或默认字符串:
string s = employees
.Where(a => a.EmployeeNumber == 2000)
.Select(a => a.FirstName)
.FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
这不会将完整的员工转移到本地,而只转移到FirstName,这是您想要的唯一字段.
suj*_*lil 27
您无需使用Where,FirstOrDefault在这种情况下,您可以在FirstOrDefault自身内部指定过滤条件.但是如果没有记录条件的话,哪个会给你null(因为没有第一个值它会给你默认值,对于引用类型对象,默认值是null),你应该null在访问值之前检查,这将抛出NullReferenceException.所以使用这样:
var Employee=employees.FirstOrDefault(a => a.EmployeeNumber == 20000);
if(Employee!=null)
{
string employee_name=Employee.FirstName;
// code here
}
Run Code Online (Sandbox Code Playgroud)
或者你可以?.用来检查null这样:
string employee_name = employees.FirstOrDefault(a => a.EmployeeNumber == 20000)?.FirstName;
Run Code Online (Sandbox Code Playgroud)
中C# 8和稍后使用null-coalescing运算符??和空检查运算符?。
像这样:
string s = employees?.Where(a => a.EmployeeNumber == 20000)
.FirstOrDefault()?
.FirstName ?? string.Empty;
Run Code Online (Sandbox Code Playgroud)
避免employees列表和任何员工属性中出现任何空异常。
也许您可以尝试使用空传播来简化它:
string s = employees.Where(a => a.EmployeeNumber == 20000).FirstOrDefault()?.FirstName;
Run Code Online (Sandbox Code Playgroud)
您可以DefaultIfEmpty使用 考虑以下示例:
var entries = new Employee[0];
var result = entries.DefaultIfEmpty(new Employee() { FirstName = "<default name>" }).First().FirstName;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37884 次 |
| 最近记录: |