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

.NET 6 Minimal API如何按Id外的其他属性查询SQL Server数据

有效解决方案

方法1:直接使用查询参数(最简单)

不需要额外创建模型,直接在接口方法中接收MetricHost作为查询参数,通过EF过滤数据:

app.MapGet("/metric/by-host", async (DataContext context, string? metricHost) =>
{
    if (string.IsNullOrWhiteSpace(metricHost))
        return Results.BadRequest("MetricHost parameter is required");

    var metrics = await context.Metrics
        .Where(m => m.MetricHost == metricHost)
        .ToListAsync();

    return metrics.Any() ? Results.Ok(metrics) : Results.NotFound("No metrics found for the specified host");
});

调用示例:GET /metric/by-host?metricHost=example.com

方法2:使用查询对象绑定(适合多条件查询)

创建专门的搜索条件类(不要修改原Metric实体),让Minimal API自动绑定查询参数:

// 单独的搜索条件类
public class MetricSearchCriteria
{
    public string? MetricHost { get; set; }
    public int? Id { get; set; }
    // 可按需添加其他查询字段,比如MetricTime范围
}

定义接口:

app.MapGet("/metric/search", async (DataContext context, MetricSearchCriteria criteria) =>
{
    var query = context.Metrics.AsQueryable();

    if (!string.IsNullOrWhiteSpace(criteria.MetricHost))
        query = query.Where(m => m.MetricHost == criteria.MetricHost);

    if (criteria.Id.HasValue)
        query = query.Where(m => m.Id == criteria.Id.Value);

    var metrics = await query.ToListAsync();
    return metrics.Any() ? Results.Ok(metrics) : Results.NotFound("No matching metrics found");
});

调用示例:GET /metric/search?metricHost=example.com 或 GET /metric/search?metricHost=example.com&id=1

方法3:使用路由参数(路径形式传递Host)

如果需要通过/hostnames/{metricHost}路径查询,确保参数名一致并处理结果:

app.MapGet("/hostnames/{metricHost}", async (DataContext context, string metricHost) =>
{
    var metrics = await context.Metrics
        .Where(m => m.MetricHost == metricHost)
        .ToListAsync();

    return metrics.Any() ? Results.Ok(metrics) : Results.NotFound($"No metrics found for host: {metricHost}");
});

调用示例:GET /hostnames/example.com


你之前尝试的问题分析

  1. 修改Metric实体添加BindAsync属于过度设计,会污染实体职责,Minimal API支持自动绑定简单对象,无需手动实现绑定逻辑。
  2. 未定义SearchCriteria类导致参数绑定失败,应创建独立的搜索模型而非复用实体类。
  3. 使用路由参数时,需保证路径参数名(如{metricHost})与方法参数名一致,同时EF查询要正确用参数过滤数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:45:32