1

使用亚马逊原生.net lib,batchget是这样的

var batch = context.CreateBatch<MyClass>();
batch.AddKey("hashkey1");
batch.AddKey("hashkey2");
batch.AddKey("hashkey3");
batch.Execute();
var result = batch.results;

现在我正在测试使用 servicestack.aws,但是我找不到如何去做。我试过以下,都失败了。

//1st try
var q1 = db.FromQueryIndex<MyClass>(x => x.room_id == "hashkey1" || x.room_id == "hashkey2"||x.room_id == "hashkey3");
var result = db.Query(q1);

//2nd try
var result = db.GetItems<MyClass>(new string[]{"hashkey1","hashkey2","hashkey3"});

在这两种情况下,它都会抛出一个异常,上面写着 Additional information: Invalid operator used in KeyConditionExpression: OR

请帮我。谢谢!

4

1 回答 1

1

使用 GetItems 应该与Gistlyn 上的这个 Live Example 一样

public class MyClass
{
    public string Id { get; set; }
    public string Content { get; set; }
}

db.RegisterTable<MyClass>();

db.DeleteTable<MyClass>();  // Delete existing MyClass Table (if any)
db.InitSchema();         // Creates MyClass DynamoDB Table

var items = 5.Times(i => new MyClass { Id = $"hashkey{i}", Content = $"Content {i}" });
db.PutItems(items);

var dbItems = db.GetItems<MyClass>(new[]{ "hashkey1","hashkey2","hashkey3" });
"Saved Items: {0}".Print(dbItems.Dump());

如果您的 Item 同时具有 Hash 和 Range Key,您将需要使用GetItems<T>(IEnumerable<DynamoId> ids)API,例如:

var dbItems = db.GetItems<MyClass>(new[]{
    new DynamoId("hashkey1","rangekey1"),
    new DynamoId("hashkey2","rangekey3"),
    new DynamoId("hashkey3","rangekey4"),
});

查询所有具有相同 HashKey 的 Item

如果您想获取具有相同 HashKey 的所有项目,您需要创建一个 DynamoDB 查询,如此Live Gistlyn 示例所示

var items = 5.Times(i => new MyClass { 
    Id = $"hashkey{i%2}", RangeKey = $"rangekey{i}", Content = $"Content {i}" });
db.PutItems(items);

var rows = db.FromQuery<MyClass>(x => x.Id == "hashkey1").Exec().ToArray();
rows.PrintDump();
于 2016-08-31T13:10:00.193 回答