从表中仅选择几列以使用 C# Web API 上的 Odata Select 查询进行映射

Posted

技术标签:

【中文标题】从表中仅选择几列以使用 C# Web API 上的 Odata Select 查询进行映射【英文标题】:Select only few columns from a table to map with Odata Select query on C# Web API 【发布时间】:2021-04-03 10:06:44 【问题描述】:

我们在数据库中有一个包含多列的表。我们只想要一个只返回请求列的查询。这些请求的列将来自使用 C# Web API 请求的 Odata Select Query。 例如,我有一个员工表,它在 SQL 中具有以下结构。

我正在调用下面的示例 API 来获取结果。 http://domain/controller/method?Select=EmployeeID,EmployeeName

这个查询应该只从数据库中获取超过 2 列;在当前场景中 - 数据库返回所有列,Web API 中的 Odata 配置在返回给用户之前过滤掉响应 请帮助如何在数据库中实现这一点。

【问题讨论】:

请包括有问题的 OData 配置和您的控制器方法。 【参考方案1】:

实体框架示例

从包含列“id”、“col1”、“col2”、“col3”的表中选择列“id”和“col3”。

class filtededMyTableRow

    public long Id  get; set; 
    public string col3  get; set; 


// ControllerName/GetCols?colNames=Id&colNames=col3
public void GetCols(string[] colNames)

    using (DbEntities context = new DbEntities())
    
        /*
        MyTable
        id  col1    col2    col3
        1   text1   text2   text3
        2   text1   text2   text3
        3   text1   text2   text3
        4   text1   text2   text3
        5   text1   text2   text3
        6   text1   text2   text3 
        */

        string selArg = string.Join(",", colNames);
        List<filtededMyTableRow> filtededMyTable = context.Database
            .SqlQuery<filtededMyTableRow>($"SELECT selArg FROM MyTable")
            .ToList();

        /*
        filtededMyTable
        Id  col3
        1   text3
        2   text3
        3   text3
        4   text3
        5   text3
        6   text3
        */
    

【讨论】:

以上是关于从表中仅选择几列以使用 C# Web API 上的 Odata Select 查询进行映射的主要内容,如果未能解决你的问题,请参考以下文章

从表中选择所有行并仅将不同的值插入到 C# 中另一个位置的数据库中

如何在时间戳字段中仅使用日期来选择记录?

从表中删除一行并将布尔标志传递给 API,而不删除实际对象

C# 查询 SQL Server 表中的 JSON 列以获取匹配的行

Pandas 组合 BQ 表中的多个列以生成 FB 转换 api 的有效负载

如何使用 C# 从表中的二维数组输出值