Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DynamoDb.net:添加多个扫描条件_C#_Amazon Dynamodb - Fatal编程技术网

C# DynamoDb.net:添加多个扫描条件

C# DynamoDb.net:添加多个扫描条件,c#,amazon-dynamodb,C#,Amazon Dynamodb,我在这里使用的是Dynamodb.net。如何添加多个扫描条件,以便根据这些条件筛选出数据。 我正在使用以下代码: var creds = new BasicAWSCredentials(awsId, awsPassword); var dynamoClient = new AmazonDynamoDBClient(creds, awsDynamoDbRegion); var context = new DynamoDBContext(dynamoClient); List<ScanCon

我在这里使用的是Dynamodb.net。如何添加多个扫描条件,以便根据这些条件筛选出数据。 我正在使用以下代码:

var creds = new BasicAWSCredentials(awsId, awsPassword);
var dynamoClient = new AmazonDynamoDBClient(creds, awsDynamoDbRegion);
var context = new DynamoDBContext(dynamoClient);
List<ScanCondition> conditions = new List<ScanCondition>();
//  conditions.Add(new ScanCondition("Id", ScanOperator.Equal, myId));
conditions.Add(new ScanCondition("name", ScanOperator.Equal, myName));
var response = await context.ScanAsync<Data>(conditions).GetRemainingAsync();
return response;
var creds=新的基本凭证(awsId、awsPassword);
var dynamoClient=新的AmazondynamodClient(creds,AWSDynamodRegion);
var context=新的DynamoDBContext(dynamoClient);
列表条件=新列表();
//添加(新的扫描条件(“Id”,ScanOperator.Equal,myId));
添加(新的ScanCondition(“name”,ScanOperator.Equal,myName));
var response=await context.ScanAsync(条件).GetRemainingAsync();
返回响应;

在我上面的代码中,如果我添加2个扫描条件,它将不起作用。但有一个条件确实有效。不确定我在这里是否做错了。

您的代码看起来不错,但有一个警告:扫描条件适用于非关键属性

我将冒险假设
Id
是表的分区键(或者可能是排序键)。如果这是真的,那就是为什么你不能在扫描条件下使用它。可以添加多个扫描条件,但它们必须全部用于非关键属性

要指定关键条件,必须使用操作,而不是

假设您的表只有一个主键而没有排序键,那么下面的示例应该可以工作。但是,如果表也有排序键,那么您的查询也必须包含该键,因此下面的示例需要稍微修改

var creds = new BasicAWSCredentials(awsId, awsPassword);
var dynamoClient = new AmazonDynamoDBClient(creds, awsDynamoDbRegion);
var context = new DynamoDBContext(dynamoClient);


var opConfig = new DynamoDBOperationConfig();
opConfig.QueryFilter = new List<ScanCondition>();
opConfig.QueryFilter.Add(new ScanCondition("name", ScanOperator.Equal, myName));
var response = await context.QueryAsync<Data>(myId, opConfig).GetRemainingAsync();
return response;
var creds=新的基本凭证(awsId、awsPassword);
var dynamoClient=新的AmazondynamodClient(creds,AWSDynamodRegion);
var context=新的DynamoDBContext(dynamoClient);
var opConfig=new dynamodbooperationconfig();
opConfig.QueryFilter=新列表();
Add(新的扫描条件(“name”,scancoperator.Equal,myName));
var response=await context.QueryAsync(myId,opConfig).GetRemainingAsync();
返回响应;

谢谢,迈克,我相信是的,我必须使用查询,而不是扫描。还有一个问题。您知道我们如何将或条件与和条件合并在一起吗。假设我有3个条件和1个条件。我使用的场景是3和条件,这是我的页面过滤器,或条件,这是我的页面搜索。我有一个API,我正在为此调用。由于dynamodb.net上的信息非常少,所以我现在正在使用SCAN for AND conditions,然后使用c#Linq for OR。我怎么能一起去俱乐部?ThanksIt可以使用低级客户端在过滤器表达式中包含布尔逻辑。请参阅:异步客户端似乎在条件语句中对布尔逻辑的支持有限:是的,Mike,我想现在我会继续在Linq中使用filter。谢谢您的帮助。您可能已经在写这篇文章之后继续前进了;)我认为dynamoDB的查询语言与其他数据库(如mongoDB、neo4J或关系数据库(SQL))相比有点有限。