首页 > 解决方案 > i:nill="true" 出现在响应中

问题描述

我有一个模型-

public class EmployeeModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Designation { get; set; }
    public double? Salary { get; set; }
}

以及类似的LINQ方法语法 -

public List<EmployeeModel> GetEmployees()
{
    using (var DbCon = new OfficeEntities())
    {
        var result = DbCon.Employee.Select(x => new EmployeeModel()
        {
            Id = x.Id,
            Name = x.Name
            //Salary = x.Salary,
            //Designation = x.Designation
        })
        .ToList();
            
        return result;
    }
}

我已经注释掉了薪水和职务,但即使它打印了 key : Salary and for valuei:null="true"为什么结果会这样

<EmployeeModel>
    <Designation i:nil="true"/>
    <Id>1</Id>
    <Name>Sulochana </Name>
    <Salary i:nil="true"/>
</EmployeeModel>

即使注释/删除了查询中的参数,为什么它会出现在结果中。请帮助

标签: entity-frameworklinq

解决方案


您正在投影中创建一个EmployeeModel对象。Select因此,Salary并且Designation正在使用它们的默认值进行初始化,即使您没有为它们设置值。然后在序列化后所有属性都出现在结果中。

如果您只期望在输出/结果中IdName则在该形状中定义一个类型 -

public class EmployeeInfo
{
    public int Id { get; set; }
    public string Name { get; set; }
}

并在投影中创建该类型的对象 -

var result = DbCon.Employee.Select(x => new EmployeeInfo()
{
    Id = x.Id,
    Name = x.Name
})
.ToList();

推荐阅读