2012-09-26 58 views
3

我想通過將文件擴展名作爲參數傳遞給方法來獲取多媒體類型的TCM URI。下面是我使用的代碼,但我得到了一些異常: -如何通過文件擴展名獲取多媒體類型的TCM URI

private static string GetMultimediaTypeTCMURI(FileExtensionsList lFileExtensions) 
{ 
    string lTCMURI = ""; 
    try 
    { 
     SessionAwareCoreService2010Client client 
              = new SessionAwareCoreService2010Client(); 
     client.ClientCredentials.Windows.ClientCredential.UserName = "myUserName"; 
     client.ClientCredentials.Windows.ClientCredential.Password = "myPassword"; 
     client.Open(); 
     FileExtensionsList list = new FileExtensionsList(); 
     var mmType = client.GetSystemWideList(new MultimediaTypesFilterData()) 
       .Single(mt => ((MultimediaTypeData)mt).FileExtensions == lFileExtensions); 
     lTCMURI = mmType.Id; 
    } 
    catch (Exception e) 
    { 
     throw new Exception("Please check either Mimetype" 
       + lFileExtensions + "is wrong or Mimetype does not exist in SDL Tridion."); 
    } 
    return lTCMURI; 

} 

呼叫上述方法: -

FileExtensionsList list = new FileExtensionsList(); 
list.Add("js"); 

GetMultimediaTypeTCMURI(list); 

我得到「序列中沒有匹配的元素」異常以上代碼,任何人請建議如何做到這一點。

回答

9

Sequence contains no matching element如果與您的Linq表達式不匹配,則會引發此錯誤。我看到的是,你要匹配擴展列表

mt => ((MultimediaTypeData)mt).FileExtensions == lFileExtensions 

這意味着,多媒體類型的文件擴展名必須完全符合您的lFileExtensions,它甚至應該有相同的順序。 相反,嘗試通過您只需要1個文件擴展名搜索:

mt => ((MultimediaTypeData)mt).FileExtensions.Contains(myFileExtension) 

還可以考慮使用SingleOrDefault方法,而不是Single。它不會拋出異常,但如果沒有匹配,則返回null。您可以稍後檢查多媒體類型null

+1

您的回覆回答我的問題,非常感謝。 –

相關問題