Атрибут не равен равно"456" - это атрибут, а не строка.Однако, если вы сначала преобразуете его в строку, она будет работать.
var feeds = from feed in xDoc.Descendants("Show")
where (string)feed.Attribute("Code") == "456"
select new
{
EventDate = feed.Attribute("Date").Value
};
Альтернативой будет int
, чтобы убедиться, что она числовая:
var feeds = from feed in xDoc.Descendants("Show")
where (int) feed.Attribute("Code") == 456
select new
{
EventDate = feed.Attribute("Date").Value
};
РЕДАКТИРОВАТЬ: ХорошоТеперь у меня есть короткая, но полная программа, показывающая, как она работает.
Обратите внимание, что ваш исходный код будет работать только в том случае, если элемент «Показать» имеет атрибут «Дата», чего нетв вашем образце XML.Обратите внимание, что он пытается получить "Date" из элемента "Show" , а не из элемента "Event" .Я не уверен, что вы действительно хотели сделать здесь, поэтому вместо этого я изменил код на DateTime?
.Приведенный ниже код работает и печатает 1 (то есть найден единственный элемент Show, соответствующий коду):
using System;
using System.Linq;
using System.Xml.Linq;
public static class Test
{
static void Main(string[] args)
{
XDocument xDoc = XDocument.Load("shows.xml");
var feeds = from feed in xDoc.Descendants("Show")
where (int) feed.Attribute("Code") == 456
select new
{
EventDate = (DateTime?) feed.Attribute("Date")
};
Console.WriteLine(feeds.Count());
}
}
Если вы на самом деле пытаетесь найти каждую дату события в рамках шоу,вам нужно еще одно предложение from, чтобы оно перебирало события внутри шоу:
var events = from feed in xDoc.Descendants("Show")
where (int) feed.Attribute("Code") == 456
// We can't use event as an identifier, unfortunately
from ev in feed.Elements("Event")
select new
{
EventDate = (DateTime?) ev.Attribute("Date")
};