繁体   English   中英

在Azure Functions中查询外部表

[英]Query external table in Azure Functions

我创建了一个Azure函数(C#)来从内部部署SQL Server数据表中提取数据。 我使用了实验性外部表连接器( apiHubTable作为技术名称)。

连接器从我的On-Premise表中检索数据,但查询未执行(我总是拥有表的完整内容):

Query query = Query.Parse($"LastUpdate >\"{jobDefinition.LastExecutionDate.ToString("yyyy-MM-ddTHH:mm:ss")}\"");
var result = await eventsSqlTable.ListEntitiesAsync(query);

这是实体定义:

public class Event
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime LastUpdate { get; set; }
}

用什么语言表达查询? OData? 另一个 ? 你有样品吗? 这个功能还没有实现吗?

过滤器以OData“语言”( OData网站 )表示,因为与On Premise SQL Server的连接是与Logic App相同的数据网关(过滤器在Logic App的逻辑应用程序中用OData表示)。

这是一个查询示例:

$top=1000&$orderby=LastUpdate&$filter=year(LastUpdate) gt 2016 or (year(LastUpdate) eq 2016 and month(LastUpdate) gt 11 or (month(LastUpdate) eq 11 and day(LastUpdate) gt 3 or (day(LastUpdate) eq 3 and hour(LastUpdate) gt 11 or (hour(LastUpdate) eq 11 and minute(LastUpdate) gt 15 or (minute(LastUpdate) eq 15 and second(LastUpdate) ge 2)))))

注意:日期比较非常复杂,因为OData / Data Gateway会在datetimeoffset(T-SQL类型)中转换datetime。 如果表字段的类型为datetime,则可能会出现一些问题。

这个pragamtica网站提供了一个工具,可以帮助您使用图形工具构建您的请求。

最后,这是用于构建过滤器最后部分的代码:

public static string BuildDateFilter(string fieldName, DateTime dateToCompare)
{
    StringBuilder filterbuilder = new StringBuilder();
    filterbuilder.Append($"year({fieldName}) gt {dateToCompare.Year} or ("); // Or Year
    filterbuilder.Append($"year({fieldName}) eq {dateToCompare.Year} and ("); //And Year
    filterbuilder.Append($"month({fieldName}) gt {dateToCompare.Month} or ("); //Or Month
    filterbuilder.Append($"month({fieldName}) eq {dateToCompare.Month} and ("); //And Month
    filterbuilder.Append($"day({fieldName}) gt {dateToCompare.Day} or ("); //Or Day
    filterbuilder.Append($"day({fieldName}) eq {dateToCompare.Day} and ("); //And Day
    filterbuilder.Append($"hour({fieldName}) gt {dateToCompare.Hour} or ("); //Or Hour
    filterbuilder.Append($"hour({fieldName}) eq {dateToCompare.Hour} and ("); //And Hour
    filterbuilder.Append($"minute({fieldName}) gt {dateToCompare.Minute} or ("); //Or Minute
    filterbuilder.Append($"minute({fieldName}) eq {dateToCompare.Minute} and ("); //And Minute
    filterbuilder.Append($"second({fieldName}) ge {dateToCompare.Second}");
    filterbuilder.Append(")"); //And Minute
    filterbuilder.Append(")"); //Or Minute
    filterbuilder.Append(")"); //And Hour
    filterbuilder.Append(")"); //Or Hour
    filterbuilder.Append(")"); //And Day
    filterbuilder.Append(")"); //Or Day
    filterbuilder.Append(")"); //And Month
    filterbuilder.Append(")"); //Or Month
    filterbuilder.Append(")"); //And Year
    filterbuilder.Append(")"); //Or Year    
    return filterbuilder.ToString();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM