2017-08-06 4 views
0

ブロックBLOBの名前で特定のUri.AbsolutePathを検索しようとしています。 Azureストレージコンテナにはブロックブロブのみが含まれています。ストレージから返されたBLOBのリストはIEnumerable(Of IListBlobItem)です。IEnumerable(Of IListBlobItem)のAzureブロブを使用したLINQクエリ

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, "") 

答えて

1

確かに、FirstOrDefaultはインテリセンスに応じIListBlobItemになりますが、それは当然のことながら、実際の実装を持っています。どのようなデバッガが実際の型が返されるかを教えてくれます。

CloudBlockBlobの実際のListBlobsの結果にのみ興味があります。

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

あなたはおそらく、あなたがListBlobs

Dim BlobList As IEnumerable(Of CloudBlockBlob) = blobClient.GetContainerReference("ContainerName").ListBlobs(prefix := "ABC.pdf").OfType(Of CloudBlockBlob) 

この行のみとなりますリストブロブのprefixオプションを使用して、サーバー側の項目を除外して検索向上させることができます:あなたはOfTypeメソッドを使用することができることを行うためにその名前は "/ ABC.pdf"で始まる/で始まります。

免責事項:私はVB.Net開発者ではありませんので、いくつかの小さな間違いや読みやすさの改善の余地があります。

関連する問題