如何使用EF Core在.ToListAsync()中排除一个“列”?

时间:2019-09-04 05:42:30

标签: c# asp.net-web-api entity-framework-core

我从return函数获得了这段async代码:

return await _context.Models.ToListAsync();

成功返回此值:

[
    { 
        "id":"id",
        "name":"name",
        "url":"url",
        "components":[]
    }
]

现在,我不想像这样显示components

[
    { 
        "id":"id",
        "name":"name",
        "url":"url"
    }
]

到目前为止,我尝试过:

return await _context.Models.Select( p => new Model {
    Id = p.Id, Name = p.Name, Url = p.Url 
}).ToListAsync();

但是它仍将显示components并且只会使它的值无效。

3 个答案:

答案 0 :(得分:1)

这是因为如果不提供值,则将创建一个新的模型和事件,编译器会为其提供默认值,因此您需要创建一个新类并从中删除属性,或者需要动态填充它并将您的代码更改为以下内容:

return await _context.Models.Select( p => new {
    Id = p.Id, Name = p.Name, Url = p.Url 
}).ToListAsync();

答案 1 :(得分:0)

您应该创建新的模型类(DTO):

public class Model2
{
public int Id {get;set};
public string Name {get;set};
public string Url {get;set};
}

然后使用

 p => new Model2 {
    Id = p.Id, Name = p.Name, Url = p.Url 
}).toListAsync

答案 2 :(得分:0)

您可以使用以下匿名类型:

myAlert.text = "test test test text"

或使用组件属性以外的所有所需属性创建DTO。

return await _context.Models                    
                 .Select(p => new {
                     p.Id,
                     p.Name        
                 });

然后:

public class DTO
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string Url { get; set; }
}