다중 필터 조건 Azure 테이블 저장소
Azure Table Storage에서 여러 필터를 설정하려면 어떻게 해야 합니까?
이것이 제가 시도한 것입니다.
string partitionFilter = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "partition1");
string date1 = TableQuery.GenerateFilterCondition("Date", QueryComparisons.GreaterThanOrEqual, "31-8-2013T14:15:14Z");
string date2 = TableQuery.GenerateFilterCondition("Date", QueryComparisons.LessThanOrEqual, "31-8-2013T14:15:14Z");
string finalFilter = TableQuery.CombineFilters(partitionFilter, TableOperators.And, date1);
이 방법은 작동하지 않습니다.TableQuery.CombineFilters()
3개의 매개 변수만 사용합니다.그리고 두 번째 날짜에 대한 추가 파라미터가 필요합니다.
두 번째 시도:
string filter = "PartitionKey eq 'partition1' and Date ge datetime'31-8-2013T14:15:14Z' and Date lt datetime'31-8-2013T14:19:10Z'";
TableQuery<CustomEntity> query = new TableQuery<CustomEntity>().Where(filter).Take(5);
반환됩니다.400 bad request
그러나 'datetime'을 제거하면 실행되지만 결과가 반환되지 않고 몇 백 개의 레코드가 반환됩니다.
msdn의 이 문서에 따르면, 그것이 날짜 시간이 포맷되어야 하는 방법입니다.
제 결과는 두 날짜 사이의 모든 기록이어야 합니다.
어떻게 하면 이 일을 해낼 수 있을까요?
먼저 파티션 필터를 날짜 필터 중 하나로 "및"한 다음 중간 결과를 다른 날짜 필터로 "및"합니다.
string date1 = TableQuery.GenerateFilterConditionForDate(
"Date", QueryComparisons.GreaterThanOrEqual,
DateTimeOffsetVal);
string date2 = TableQuery.GenerateFilterConditionForDate(
"Date", QueryComparisons.LessThanOrEqual,
DateTimeOffsetVal);
string finalFilter = TableQuery.CombineFilters(
TableQuery.CombineFilters(
partitionFilter,
TableOperators.And,
date1),
TableOperators.And, date2);
Windows Azure Storage 7.0.0을 사용하고 있으며 더 이상 필터를 결합할 필요가 없도록 Linq 쿼리를 사용할 수 있습니다.
// filter dates for test
var startDate = DateTime.Parse("01/02/2016 12:00:00 AM");
var endDate = DateTime.Parse("02/02/2016 12:00:00 AM");
// Get the cloud table
var cloudTable = GetCloudTable();
// Create a query: in this example I use the DynamicTableEntity class
var query = cloudTable.CreateQuery<DynamicTableEntity>()
.Where(d => d.PartitionKey == "partition1"
&& d.Timestamp >= startDate && d.Timestamp <= endDate);
// Execute the query
var result = query.ToList();
생성된 쿼리는 다음과 같습니다.
((PartitionKeyeq 'partition1') 및 (타임스탬프 datetime '2016-01-31T11:00:00Z') 및 (타임스탬프 datetime '2016-02-01T11:00:00Z')
다음을 확인할 수 있습니다.
- 필터가 결합되었습니다.
- 날짜가 UTC로 변환되었습니다.
Azure Table Storage에서 여러 필터를 설정하려면 어떻게 해야 합니까?
저도 같은 것이 궁금했습니다.TableQuery 수업의 확장자를 작성했는데 잘 작동합니다.
여러 필터를 사용하여 잘못된 쿼리를 수행하는 것은 아닌지 의문이 드는 쉬운 변경입니다.
public static class TableQueryExtensions
{
public static TableQuery<TElement> AndWhere<TElement>(this TableQuery<TElement> @this, string filter)
{
@this.FilterString = TableQuery.CombineFilters(@this.FilterString, TableOperators.And, filter);
return @this;
}
public static TableQuery<TElement> OrWhere<TElement>(this TableQuery<TElement> @this, string filter)
{
@this.FilterString = TableQuery.CombineFilters(@this.FilterString, TableOperators.Or, filter);
return @this;
}
public static TableQuery<TElement> NotWhere<TElement>(this TableQuery<TElement> @this, string filter)
{
@this.FilterString = TableQuery.CombineFilters(@this.FilterString, TableOperators.Not, filter);
return @this;
}
}
답을 하나 더 추가하고 싶었을 뿐입니다.
string filter = "PartitionKey eq 'partition1' and Date ge datetime'31-8-2013T14:15:14Z' and Date lt datetime'31-8-2013T14:19:10Z'";
TableQuery<TablePost> query = new TableQuery<TablePost>().Where(filter).Take(5);
위의 코드가 실패하는 이유는 날짜/시간 값을 입력해야 하기 때문입니다.yyyy-MM-ddTHH:mm:ssZ
서식을 정하다따라서 다음과 같은 질문을 해야 합니다.
string filter = "(PartitionKey eq 'partition1') and (Date ge datetime'2013-08-31T14:15:14Z' and Date lt datetime'2013-08-31T14:19:10Z')";
TableQuery<TablePost> query = new TableQuery<TablePost>().Where(filter).Take(5);
@LivingOn을 기반으로 필터가 아직 없는 새 쿼리의 경우 처리클라우드, 저는 차라리 이렇게 쓰고 싶습니다.
public static TableQuery<TElement> AndWhere<TElement>(this TableQuery<TElement> query, string filter)
where TElement : ITableEntity,new ()
{
if (query.FilterString.IsNullOrEmpty())
{
query.FilterString = filter;
}
else
{
query.FilterString = TableQuery.CombineFilters(query.FilterString, TableOperators.And, filter);
}
return query;
}
그리고 나머지는 같은 점검을 따르며, 상황이 더 나아질 수 있습니다.
언급URL : https://stackoverflow.com/questions/18549555/multiple-filter-conditions-azure-table-storage
'programing' 카테고리의 다른 글
플라우터:코코아 포드의 사양 저장소가 너무 오래되어 종속성을 충족할 수 없습니다. (0) | 2023.06.21 |
---|---|
반복 컨텐츠 iOS에 콘센트를 연결할 수 없습니다. (0) | 2023.06.21 |
달러(약)iPhone에서 click()이 올바르게 작동하지 않습니다. jquery (0) | 2023.06.21 |
파일 기록을 표시하시겠습니까? (0) | 2023.06.21 |
Excel에서 워크시트의 모든 셀을 선택하는 방법.c#의 범위 개체? (0) | 2023.06.21 |