【问题标题】:Azure table storage: How to get a single entity by a partition key only?Azure 表存储:如何仅通过分区键获取单个实体?
【发布时间】:2019-08-23 07:54:33
【问题描述】:

我正在尝试获取仅提供分区键的单个实体。我当前的代码从 IEnumerable 向我返回了一个列表,但实际上它只是一个实体,而拥有一个列表似乎不是很有效,我必须通过它进行一次 foreach。有没有办法在没有列表/IEnumerable 的情况下实现?

var entities = currentTable.ExecuteQuery(new TableQuery<ItemEntity>()).Where(e => e.PartitionKey.Equals(itemEntity.xId)).ToList();

【问题讨论】:

  • 不,你不能。至少您应该使用分区键和行键来识别实体。
  • Ivan Yang...请将您的评论作为答案。

标签: c# azure azure-table-storage


【解决方案1】:

如果要获取指定的实体,需要同时提供Partition key和row key。

但是如果你想得到一个随机实体,你应该使用GvS提供的方法。

【讨论】:

    【解决方案2】:

    查询的结果总是一个 IEnumerable。

    如果您期望只有一个结果,您可以使用:

    var result = currentTable.ExecuteQuery(new TableQuery<ItemEntity>()).Where(e => e.PartitionKey.Equals(itemEntity.xId)); 
    
    // First element from the result. Will fail when there is no element
    var entity1 = result.First();
    
    // First element from the result. Will give null when no element is available.
    var entity2 = result.FirstOrDefault();
    
    // First element from the result. Will fail when there is no element, or more as one element
    var entity3 = result.Single();
    
    // First element from the result. Will give null when one element is available, or fail (Exeption) when more as one.
    var entity4 = result.SingleOrDefault();
    

    【讨论】:

      猜你喜欢
      • 2022-11-09
      • 2013-09-17
      • 2017-05-12
      • 2020-10-08
      • 2013-02-04
      • 2014-02-04
      • 1970-01-01
      • 2016-08-05
      • 1970-01-01
      相关资源
      最近更新 更多