3

誰かがこのクエリのエラーを修復するために私を導くことができますか?

       var objApps = from item in xDoc.Descendants("VHost") 
                          where(from x in item.Descendants("Application"))
                          select new clsApplication
                       {
                           ConnectionsTotal = item.Element("ConnectionsTotal").Value
                       };

「クエリ本体はselect句またはgroup句で終了する必要があります」というコンパイラエラーが表示されます。どこが間違っているのですか?

助けていただければ幸いです。

ありがとう。

編集:これが私のXMLです(ここでタグを閉じていません)...アプリケーション内のconnectioncount値が必要です。

    - <Server>
  <ConnectionsCurrent>67</ConnectionsCurrent> 
  <ConnectionsTotal>1424182</ConnectionsTotal> 
  <ConnectionsTotalAccepted>1385091</ConnectionsTotalAccepted> 
  <ConnectionsTotalRejected>39091</ConnectionsTotalRejected> 
  <MessagesInBytesRate>410455.0</MessagesInBytesRate> 
  <MessagesOutBytesRate>540146.0</MessagesOutBytesRate> 
- <VHost>
  <Name>_defaultVHost_</Name> 
  <TimeRunning>5129615.178</TimeRunning> 
  <ConnectionsLimit>0</ConnectionsLimit> 
  <ConnectionsCurrent>67</ConnectionsCurrent> 
  <ConnectionsTotal>1424182</ConnectionsTotal> 
  <ConnectionsTotalAccepted>1385091</ConnectionsTotalAccepted> 
  <ConnectionsTotalRejected>39091</ConnectionsTotalRejected> 
  <MessagesInBytesRate>410455.0</MessagesInBytesRate> 
  <MessagesOutBytesRate>540146.0</MessagesOutBytesRate> 
- <Application>
  <Name>TestApp</Name> 
  <Status>loaded</Status> 
  <TimeRunning>411642.953</TimeRunning> 
  <ConnectionsCurrent>11</ConnectionsCurrent> 
  <ConnectionsTotal>43777</ConnectionsTotal> 
  <ConnectionsTotalAccepted>43135</ConnectionsTotalAccepted> 
  <ConnectionsTotalRejected>642</ConnectionsTotalRejected> 
  <MessagesInBytesRate>27876.0</MessagesInBytesRate> 
  <MessagesOutBytesRate>175053.0</MessagesOutBytesRate>
4

6 に答える 6

4

コンパイラはこの部分について不平を言っています

from x in item.Descendants("Application")

あなたのWhere条項の中に。次のように変更する必要があります

  • select最後に節があり、
  • 保持したいオブジェクトを評価する式を構成しtrueます。item

これがあなたがやろうとしていることについての私の最善の推測です(編集: 2番目の試み)

var objApps = from item in xDoc.Descendants("VHost").Descendants("Application") 
              select new clsApplication {
                  ConnectionsTotal = item.Element("ConnectionsTotal").Value
              };
于 2012-12-04T16:33:12.790 に答える
3

エラーは、内側のfrom句(where内)について不平を言っています。これは、select many(意図しないクリップの参照)を実行しようとしているように見えます。

var objApps = from item in xDoc.Descendants("VHost") 
              from x in item.Descendants("Application")
              select new clsApplication
                       {
                           ConnectionsTotal = x.Element("ConnectionsTotal").Value
                       };
于 2012-12-04T16:34:04.417 に答える
2

where句内のクエリにselectがありません。次のように変更できます

var objApps = from item in xDoc.Descendants("VHost") 
                     where(item.Descendants("Application").Any())
                     select new clsApplication
                     {
                           ConnectionsTotal = item.Element("Application").Element("ConnectionsTotal").Value
                     };
于 2012-12-04T16:31:42.070 に答える
2

where次のことを行うだけで、句は不要です。子孫は、すぐ下だけでなく、すべてのレベルで子供を検索します。

var objApps = from item in xDoc.Descendants("Application") 
                   select new clsApplication
                   {
                       ConnectionsTotal = item.Element("ConnectionsTotal").Value
                   };
于 2012-12-04T17:19:32.027 に答える
1

これは役立つかもしれません:

        var objApps = from item in xDoc.Descendants("VHost")
                       from x in item.Descendants("Application")
                      select new clsApplication
                   {
                       ConnectionsTotal = item.Element("Application").Element("ConnectionsTotal").Value
                   };
于 2012-12-04T16:35:40.943 に答える
1

私はlinqの手続き的な方法が好きです。これは、そのアプローチをより直線的にすることができます。私はあなたが欲しいと信じています

var result =   xDoc.Descendants("VHost")
                   .Descendants("ConnectionsTotal")
                   .Select(ele => ele.Value )
                   .Select( value => new clsApplication
                           {
                               ConnectionsTotal = value
                           })
                         ;

---LinqPadでテスト---

string xml = @"
<Data>
<Server>
  <ConnectionsCurrent>67</ConnectionsCurrent> 
  <ConnectionsTotal>1424182</ConnectionsTotal> 
  <ConnectionsTotalAccepted>1385091</ConnectionsTotalAccepted> 
  <ConnectionsTotalRejected>39091</ConnectionsTotalRejected> 
  <MessagesInBytesRate>410455.0</MessagesInBytesRate> 
  <MessagesOutBytesRate>540146.0</MessagesOutBytesRate> 
 </Server>
 <VHost>
  <Name>_defaultVHost_</Name> 
  <TimeRunning>5129615.178</TimeRunning> 
  <ConnectionsLimit>0</ConnectionsLimit> 
  <ConnectionsCurrent>67</ConnectionsCurrent> 
  <ConnectionsTotal>1424182</ConnectionsTotal> 
  <ConnectionsTotalAccepted>1385091</ConnectionsTotalAccepted> 
  <ConnectionsTotalRejected>39091</ConnectionsTotalRejected> 
  <MessagesInBytesRate>410455.0</MessagesInBytesRate> 
  <MessagesOutBytesRate>540146.0</MessagesOutBytesRate> 
 </VHost>
 <Application>
  <Name>TestApp</Name> 
  <Status>loaded</Status> 
  <TimeRunning>411642.953</TimeRunning> 
  <ConnectionsCurrent>11</ConnectionsCurrent> 
  <ConnectionsTotal>43777</ConnectionsTotal> 
  <ConnectionsTotalAccepted>43135</ConnectionsTotalAccepted> 
  <ConnectionsTotalRejected>642</ConnectionsTotalRejected> 
  <MessagesInBytesRate>27876.0</MessagesInBytesRate> 
  <MessagesOutBytesRate>175053.0</MessagesOutBytesRate></Application>
  </Data>";


  var XDoc = XDocument.Parse(xml);

  XDoc.Descendants("VHost")
      .Descendants("ConnectionsTotal")
      .Select (ele => ele.Value )
      .Dump();  
于 2012-12-04T16:37:04.347 に答える