2017-02-15 6 views
1

私は、構内SQL Serverのデータテーブルからデータを取り込むAzure関数(C#)を作成しました。私は実験的な外部テーブルコネクタを使用しました(技術名称はapiHubTable)。Azureの外部テーブルを照会する

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

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

は、エンティティ定義である:

コネクタが私のオンプレミスのテーブルからデータを取得しますが、クエリが実行されません(私はいつもテーブルの完全な内容を持っています)

クエリを表すために使用する言語は何ですか? OData?もう一つ?サンプルはありますか? この機能はまだ実装されていますか?

答えて

0

フィルタは、On Premise SQL Serverへの接続がLogic Appと同じデータゲートウェイをスローされるため、OData "language"(OData website)で表されます(フィルタはSQLコネクタの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の/データ・ゲートウェイは、のDateTimeOffset(T-SQL型)で日時を変換するので日付の比較はかなり複雑です。テーブルフィールドの型がdatetimeの場合、いくつかの問題が発生する可能性があります。

このpragamtica websiteには、グラフィックツールを使用してリクエストを作成するのに役立つツールがあります。

は最後に、ここではフィルタの最後の部分を構築するために使用されるコードは次のとおりです。

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(); 
} 
+0

私はあなたを聞いてもどのようにListEntitiesAsyncメソッドでクエリを含めたのですか? 'クエリクエリ=クエリ。 var list = await inputTable.ListEntitiesAsync(query); ' これはそうではありません: ' Query query = Query.Parse( "$ filter = Id eq 5"); var list = await inputTable.ListEntitiesAsync(query); ' おそらくフィルタリングは実装されていませんか? –

関連する問題