0

次の XML があります。

<Events>
    <Event>
        <EventID displayName="Event ID">1</EventID>
        <EventName displayName="Event Name">Some event</EventName>
        <OrgID displayName="Organization ID">8</OrgID>
    </Event>
    <Event>
        <EventID displayName="Event ID">2</EventID>
        <EventName displayName="Event Name">Another Event</EventName>
        <OrgID displayName="Organization ID">10</OrgID>
    </Event>
</Events>

動的に構築された where 句でそれらをフィルタリングできるようにしたいと考えています。例えば:

Where("Event ID = 2 AND (Organization ID = 8 OR Organization ID = 10)")

データのフィルタリングには displayName しか使用できないことに注意してください。もちろん、displayName からタグ名を取得して where 句を作成することもできますが、これはクライアント マシンで計算が追加されることを意味し、可能であれば回避したいと考えています。

Dynamic LinqまたはDataTable.Select()を使用するオプションを調べましたが、Linq に関する知識が限られているため、これらを採用して XML データをフィルター処理する簡単な方法を見つけることができないようです。ヘルプ/ヒントをいただければ幸いです。

4

3 に答える 3

0

xml を完全に解析する

var eventList=doc.Elements("Event")
                 .Select(x=>new 
                  {
                      EventId=int.Parse(x.Element("EventId").Value),
                      EventName=x.Element("EventName").Value,
                      OrgID=int.Parse(x.Element("OrgID").Value)
                  });

これで、一般化されたメソッドを作成できます。

public string getEventName(int eventId,params int[] orgId)
{
     return eventList.Where(x=>
                              x.EventId==eventId && 
                               orgId.Any(y=>y==x.OrgID))
                     .Select(x.EventName)
                     .Single();

}

今、あなたはすることができます

getEventName(2);
getEventName(2,8);
getEventName(2,8,10);
于 2013-09-30T12:52:01.113 に答える
0

では、linq 構文を使用して xml からデータを取得したいですか?

そんな感じ?

XDocument loadedXML = XDocument.Load('Your xml file name');
var yourStrongTypeEventsList
   = (from event in loadedXML.Descendants("Event")
      where event.Element("EventID").Attribute("displayName").Value.Equals("Your value here")
      select new
         {                  
           EventID = event.Element("EventID").Value,
           EventName = event.Element("EventName").Value
         }).ToList();
于 2013-09-30T12:44:14.253 に答える