通过IEnumerable(IListBlobItem)的Azure Blob进行LINQ查询

通过IEnumerable(IListBlobItem)的Azure Blob进行LINQ查询,linq,azure,casting,azure-storage-blobs,Linq,Azure,Casting,Azure Storage Blobs,我试图通过名称为块blob查找特定的Uri.AbsolutePath。Azure存储容器仅包含块Blob。从存储返回的blob列表是IEnumerable(属于IListBlobItem) 我使用FirstOrDefault按其名称查找特定blob。编译器说CloudBlockBlob没有Name属性。这可能与单个blob项目类型有关。即使我在FirstOrDefault中使用CloudBlockBlob,它仍然是IListBlobItem,因此缺少Name属性。如何有效地解决这一问题 Dim

我试图通过名称为块blob查找特定的
Uri.AbsolutePath
。Azure存储容器仅包含块Blob。从存储返回的blob列表是
IEnumerable(属于IListBlobItem)

我使用FirstOrDefault按其名称查找特定blob。编译器说CloudBlockBlob没有Name属性。这可能与单个blob项目类型有关。即使我在FirstOrDefault中使用CloudBlockBlob,它仍然是IListBlobItem,因此缺少Name属性。如何有效地解决这一问题

Dim storageAccount As CloudStorageAccount = CloudStorageAccount.Parse("Storage connection string")
Dim blobClient As CloudBlobClient = storageAccount.CreateCloudBlobClient()
Dim BlobList As IEnumerable(Of IListBlobItem) = blobClient.GetContainerReference("ContainerName").ListBlobs
Path= If(BlobList.FirstOrDefault(Function(CloudBlockBlob) CloudBlockBlob.Name = "ABC.pdf")?.Uri.AbsolutePath, "")

当然,
FirstOrDefault
将根据intellisense生成一个
IListBlobItem
,但它当然有一个实际的实现。任何调试器都会告诉您返回的实际类型

在您的案例中,您只对实际类型为
CloudBlockBlob
listblob的结果感兴趣。为此,您可以使用以下方法:

通过使用
ListBlobs

Dim BlobList As IEnumerable(Of CloudBlockBlob) = blobClient.GetContainerReference("ContainerName").ListBlobs(prefix := "ABC.pdf").OfType(Of CloudBlockBlob)
此行只列出名称以/等于“ABC.pdf”开头的blob


免责声明:我不是VB.Net开发人员,因此可能会有一些小错误和可读性改进的空间。

当然,
FirstOrDefault
将根据intellisense生成一个
IListBlobItem
,但它当然有一个实际的实现。任何调试器都会告诉您返回的实际类型

在您的案例中,您只对实际类型为
CloudBlockBlob
listblob的结果感兴趣。为此,您可以使用以下方法:

通过使用
ListBlobs

Dim BlobList As IEnumerable(Of CloudBlockBlob) = blobClient.GetContainerReference("ContainerName").ListBlobs(prefix := "ABC.pdf").OfType(Of CloudBlockBlob)
此行只列出名称以/等于“ABC.pdf”开头的blob

免责声明:我不是VB.Net开发人员,因此可能会有一些小错误和可读性改进的空间