Как создать QueryExpression с нулевым полем в PocoDynamo
Я хочу запрос через GSI, когда ключ диапазона равен нулю. У меня есть этот код, но он выбросил исключение
IPocoDynamo dbDynamo = new PocoDynamo(new AmazonDynamoDBClient());
var queryExpression = dbDynamo.FromQueryIndex<IndexName>(x => x.InvalidFrom == (DateTime?)null);
var response = dbDynamo.Query(queryExpression);
Моя модель выглядит так
[References(typeof(IndexName))]
[Alias("TableName")]
public class Child
{
[AutoIncrement]
public int ChildId { get; set; }
public int ParentId { get; set; }
public string Key { get; set; }
public DateTime? InvalidFrom { get; set; }
public decimal Value { get; set; }
}
Это мой индекс
public class IndexName: IGlobalIndex<Child>
{
[HashKey]
public int ParentId { get; set; }
[RangeKey]
public DateTime? InvalidFrom { get; set; }
public int ChildId { get; set; }
}
Что я делаю не так?
Спасибо
2 ответа
Решение
Во-первых, когда вы используете запрос, вам всегда нужно указывать хэш в запросе, поэтому для него требуется минимум:
var q = dbDynamo.FromQueryIndex<IndexName>(x =>
x.ParentId = parentId && x.InvalidFrom == (DateTime?)null);
Но пытаясь вставить элемент без InvalidFrom
значение, например:
db.PutItem(new Child { ParentId = 2, Key = "Key2", Value = 2 });
Удастся, когда Child
не имеет глобального индекса, но потерпит неудачу, когда IndexName
содержащий обнуляемый DateTime?
Ключ диапазона с:
Invalid attribute value type
По сути, AWS не позволит вам вставить NULL
значение, когда оно определено в ключе диапазона глобального индекса, но оно позволит вам вставить значение NULL в свойство, отличное от Range Key. Так что этот вариант использования не поддерживается.