gpt4 book ai didi

c# - 生成过滤条件更新不起作用

转载 作者:行者123 更新时间:2023-12-03 01:51:50 26 4
gpt4 key购买 nike

我创建了一个云服务,它从 Azure 存储的 WadWindowsEventLogs 表中获取数据并从中返回 csv 文件。但是当我在表查询上生成日期过滤条件时,它返回一个空的 csv 文件,根本没有行。我返回字符串的函数是

public string retrieveWADWindowsEventLogsTable()
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
CloudConfigurationManager.GetSetting("DefaultConnectionString"));

CsvExport myExport = new CsvExport();
//Creating a table client
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

//getting reference to the desired table
CloudTable table = tableClient.GetTableReference("WADWindowsEventLogsTable");

TableQuery<WADWindowsEventLogsTableEntity> query = new TableQuery<WADWindowsEventLogsTableEntity>().Where(TableQuery.GenerateFilterConditionForDate("TimeStamp", QueryComparisons.GreaterThanOrEqual, new DateTime(2016,02,01)));

//For each row in table, creating the corresponding entry in CSV file
foreach (WADWindowsEventLogsTableEntity entity in table.ExecuteQuery(query))
{
//some code

}

var exp = myExport.Export();
return exp;
}

之后,我有另一个函数可以将此字符串转换为 csv,我认为在这个问题的上下文中不需要它。那么我的实体类是

public class WADWindowsEventLogsTableEntity : TableEntity
{
public WADWindowsEventLogsTableEntity()
{

}
//public string PartitionKey { get; set; }
//public string RowKey { get; set; }
public DateTime TimeStamp { get; set; }

public string Channel { get; set; }
public string DeploymentId { get; set; }
public string Description { get; set; }
public Int32 EventId { get; set; }
public Int64 EventTickCount { get; set; }
public Int32 Level { get; set; }
public Int32 Opcode { get; set; }
public Int32 Pid { get; set; }
public DateTime PreciseTimeStamp { get; set; }
public string ProviderGuid { get; set; }
public string ProviderName { get; set; }
public string RawXml { get; set; }
public string Role { get; set; }
public string RoleInstance { get; set; }
public string RowIndex { get; set; }
public DateTime TIMESTAMP { get; set; }
public Int32 Task { get; set; }
public Int32 Tid { get; set; }

}

感谢任何帮助

最佳答案

正如我的 blog 中提到的,这些表中的PartitionKey值实际上代表了日志的创建时间。它本质上是附加了 0DateTime 值的 Ticks 属性。您需要做的是获取您感兴趣的日期/时间,计算其 Ticks 值并在其前面添加 0。然后在查询中使用该值。如下所示:

        var dateTime = new DateTime(2016, 02, 01, 0, 0, 0, DateTimeKind.Utc);
var partitionKeyValue = "0" + dateTime.Ticks;
TableQuery<WADWindowsEventLogsTableEntity> query = new TableQuery<WADWindowsEventLogsTableEntity>().Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.GreaterThanOrEqual, partitionKeyValue));

您的代码不起作用的原因是您在 Timestamp 属性上查询表,而该属性未由表服务编制索引。因此您的查询正在执行全表扫描。如果您的表很大,那么它不会返回任何结果,而是返回一个延续标记。您可以使用此继续 token 来获取下一组条目。

关于c# - 生成过滤条件更新不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35431006/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com