2012-09-26 30 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

您的回复回答我的问题,非常感谢。 –

相关问题