C# 在Azure函数中查询外部表
我创建了一个Azure函数(C#)来从本地SQL Server数据表中摄取数据。我使用了实验性的外部表连接器(技术名称为ApiHubbable) 连接器从我的本地表中检索数据,但不执行查询(我始终拥有表的全部内容): 以下是实体定义:C# 在Azure函数中查询外部表,c#,azure,azure-functions,C#,Azure,Azure Functions,我创建了一个Azure函数(C#)来从本地SQL Server数据表中摄取数据。我使用了实验性的外部表连接器(技术名称为ApiHubbable) 连接器从我的本地表中检索数据,但不执行查询(我始终拥有表的全部内容): 以下是实体定义: public class Event { public int Id { get; set; } public string Name { get; set; } public DateTime LastUpdate { get; set;
public class Event
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime LastUpdate { get; set; }
}
什么语言用于表示查询?奥达塔?另一个?有样品吗?
此功能是否已实现?过滤器用OData“语言”(language)表示,因为与本地SQL Server的连接使用与Logic App相同的数据网关(过滤器在Logic App中用OData表示SQL连接器) 以下是一个查询示例:
$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,则可能会出现一些问题
这提供了一个工具,可以通过图形工具帮助您构建请求
最后,以下是用于构建过滤器最后一部分的代码:
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();
}
过滤器用OData“语言”(language)表示,因为与本地SQL Server的连接使用与Logic App相同的数据网关(过滤器在Logic App中用OData表示,用于SQL连接器) 以下是一个查询示例:
$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,则可能会出现一些问题
这提供了一个工具,可以通过图形工具帮助您构建请求
最后,以下是用于构建过滤器最后一部分的代码:
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();
}
请问您是如何将查询包括在ListentiesAsync方法中的?这是有效的:
Query=Query.Parse($top=50”);var list=wait inputable.listentiesasync(查询)代码>这不是:Query=Query.Parse(“$filter=Id eq 5”);var list=wait inputable.listentiesasync(查询)代码>可能没有实现过滤?请问您是如何将查询包括在ListentiesAsync方法中的?这是有效的:Query=Query.Parse($top=50”);var list=wait inputable.listentiesasync(查询)代码>这不是:Query=Query.Parse(“$filter=Id eq 5”);var list=wait inputable.listentiesasync(查询)代码>可能未实现过滤?