从表中仅选择几列以使用 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# 中另一个位置的数据库中
C# 查询 SQL Server 表中的 JSON 列以获取匹配的行