2009-07-09 13 views
0

FIRST LinqToXML結果を返す簡単な方法はありますか?

私は単一のレコード(正しい用語?)を返すLinqToXmlクエリを持って、[OK]を、

しかし、私は、クエリから1つのレコードを引っ張って...のループを使用したくありません。簡単な方法がありますか?

*ボーナスクエリを記述するためのより良い方法を見つけた場合

私のxmlファイル(私はまだ学んでいる):

<?xml version="1.0"?> 
<!-- first draft of LibMappings.xml file --> 
<LibMappings> 
    <File> 
     <Name>Foundation.dll</Name> 
     <Map>Lib\Foundation</Map> 
    </File> 
</LibMappings> 

マイコード:

private static string GetMapFor(string dllName) 
{ 
     //Opens Xml File and gets "Lib" map for dllName 
     string retVal; 
    XDocument libMapFile = XDocument.Load(_libMapFilePath); 

    //This query will return 1 record 
    IEnumerable<XElement> query = from c in libMapFile.Descendants("File") 
          where (string)c.Element("Name") == dllName 
         select c.Element("Map"); 
    if (query.Count() == 1) 
    { 
     //there's only gonna be one here.. I might as well do this.. 
     foreach (string x in query) 
     { 
      retVal = x; 
      break; 
     } 

     //I'd like to do this: 
     retVal = query[0]; 

    } 
     return retVal; 
} 

答えて

1
IEnumerable<XElement> query = from c in libMapFile.Descendants("File") 
             where (string)c.Element("Name") == dllName 
           select c.Element("Map"); 
XElement element = query.First(); 
return element.Value; 
0

試用版:

select c.Element( "Ma p ")。最初();

か、あなたが結果として得られますわからない場合:。

はc.Element( "マップ")を選択しFirstOrDefault();

次に、結果があるかどうかを確認するためにnullを確認します。

4

FirstまたはFirstOrDefault拡張メソッドを探しています。

これらのメソッドは、クエリの最初の要素を返します。クエリの結果が空の場合にのみ動作が異なります。最初のメソッドは例外をスローしますが、FirstOrDefaultはクエリの要素の型のデフォルト値(通常はnull)を返します。

var first = query.First(); 
関連する問題