У меня есть список загрузок из XML.Сравнение списков различного типа с linq
XML-выглядит следующим образом:
<TablesToSynchronize>
<Table name="dbo.Table1" />
<Table name="dbo.Table2" />
<Table name="dbo.Table3" />
<Table name="dbo.Table4" />
</TablesToSynchronize>
Я хочу, чтобы сравнить список XElement
со списком string
, но я не могу получить его вместе.
private static readonly XDocument TableSettings = XDocument.Load(GetAssemblyDirectory() + @"\Tables.xml");
private static List<XElement> TablesToSync = new List<XElement>();
static void Main(string[] args)
{
{
var test = TableSettings.Descendants("Table").Select(x => x.Attribute("name").Value.ToString());
test = test.Where(args.ToList().Contains).ToList();
var test2 = (from x in TableSettings.Descendants("Table")
where x.Attribute("name").Value == "dbo.Table1"
select x).ToList();
//TablesToSync = ??
}
}
вар test2
работает нормально, но он возвращает только XElement
с «Table1». Я хочу скомпоновать args и проверить, соответствует ли какой-либо элемент XElement
атрибуту ("name").Value
.
Что мне здесь не хватает?
арг содержит dbo.Table1, dbo.Table2, dbo.Table3
UPDATE: test2 дает мне список XElement
содержащий dbo.Table1. test дает мне пустой список string
.
Выход должен быть List<XElement>
извините, это должно быть dbo.Table везде. Будет обновлен – MrProgram
, вы можете использовать [предложение соединения] (https://msdn.microsoft.com/en-us//library/bb311040.aspx?f=255&MSPPError=-2147217396) нечто вроде 'from x в TableSettings.Descendants (" Таблица ") из y в args join x.Attribute (" name "). Значение равно y select x' – Grundy
возможно, это будет работать test = test.where (t => args.ToList(). Содержит (t)) ToList() – Pumpkin