You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Entity Framework Core中获取指定列及执行自定义查询?

Entity Framework Core 常见问题解决

一、获取指定列数据

你可以通过投影来仅选择需要的列,常用两种实现方式:

1. 匿名类型(适合临时场景)

直接在Select方法中指定要返回的列:

[HttpGet]
public async Task<IActionResult> GetAllProducts()
{
    var products = await _fullStackDbContext.Products
        .Select(p => new 
        {
            p.Id,
            p.Name,
            p.Price // 替换为你实际需要的列名
        })
        .ToListAsync();

    return Ok(products);
}

2. 自定义DTO类(适合复用场景)

如果需要在多处复用返回结构,建议定义DTO(数据传输对象):

// 先定义DTO类
public class ProductDto
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}

// 接口中使用DTO
[HttpGet]
public async Task<IActionResult> GetAllProducts()
{
    var products = await _fullStackDbContext.Products
        .Select(p => new ProductDto
        {
            Id = p.Id,
            Name = p.Name,
            Price = p.Price
        })
        .ToListAsync();

    return Ok(products);
}

二、自定义查询相关说明

你之前的代码其实会自动生成SQL查询,EF Core会把LINQ语句翻译成对应的SQL发送到数据库,比如_fullStackDbContext.Products.ToListAsync()会生成SELECT * FROM Products这类查询。

如果需要执行自定义SQL或复杂逻辑,有以下几种方式:

1. 执行原生SQL返回实体

用FromSqlRaw执行原生SQL并返回实体类型:

[HttpGet]
public async Task<IActionResult> GetProductsByName(string name)
{
    var products = await _fullStackDbContext.Products
        .FromSqlRaw("SELECT * FROM Products WHERE Name = {0}", name)
        .ToListAsync();

    return Ok(products);
}

2. 执行原生SQL返回自定义类型

EF Core 7及以上版本支持直接返回非实体的自定义类型:

[HttpGet]
public async Task<IActionResult> GetProductNames()
{
    var productNames = await _fullStackDbContext.Database
        .SqlQuery<string>("SELECT Name FROM Products")
        .ToListAsync();

    return Ok(productNames);
}

3. 用LINQ构建复杂查询

无需写原生SQL,用LINQ即可实现过滤、排序、分组等复杂逻辑:

[HttpGet]
public async Task<IActionResult> GetCheapProducts()
{
    var cheapProducts = await _fullStackDbContext.Products
        .Where(p => p.Price < 50)
        .OrderBy(p => p.Price)
        .Select(p => new { p.Id, p.Name, p.Price })
        .ToListAsync();

    return Ok(cheapProducts);
}

内容的提问来源于stack exchange,提问作者Muhammad Arif

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 04:15:35