2016-11-25 3 views
0

Я получил список XElement как это:Сравните 2 различных списки между списком <XElement> и списком <String>

List<XElement> x = rootx.Elements("table").Elements("row").Where(row => row.Elements("column").ElementAt(1).Value == "1").ToList<XElement>(); 

Затем я получил еще один список Строки так:

List<String> CoList = ds.Tables[0].AsEnumerable().Select(dataRow => dataRow.Field<string>("id")).ToList(); 

Как я могу сделать новый Список XElement до исключает элементы в x, которые не найдены в CoList?

For example, if x contains { a, b, c, d} and CoList contains { a, c, d}, how can i return a new x that contains { a, c, d} ?

Есть ли простой способ сделать это? Tks

+0

Я не понимаю ваш пример. Вы сказали, что хотите * исключить * элементы, которые появляются в X, но не в CoList. Итак, если X - это '{a, b, c, d}' и CoList - '{a, c, d}', то вы хотите исключить 'b', правильно? Но '' '' 'появляется в вашем примере result' {a, b, d} '. Вы имели в виду сказать '{a, c, d}'? –

+0

Yup, Брайан, вы правы! Мы с Tks внесли изменения в мой пример выше. Я имею в виду {a, c, d} как конечный результат. – Trowa

+0

Привет, Брайан, я видел, что вы опубликовали комментарий, связанный с методом XElementEqualityComparer, но теперь комментарий удален. Просто интересно, будет ли метод XElementEqualityComparer эффективным, если список содержит 1000+ записей? Tks – Trowa

ответ

1

Вы можете преобразовать у в строку более сложным способом, но это суть его

var newList = x.Where(y => CoList.Contians(y.ToString())); 
+0

Список x1 = x.Where (y => CoList.Contains (y.Elements ("column"). ElementAt (0) .Value)); но я получил ошибку: Невозможно неявно преобразовать тип 'System.Collections.Generic.IEnumerable ' to 'System.Collections.Generic.List ' , Явное преобразование существует (вы пропускаете листинг?) как это решить? – Trowa

+0

Я разрешил это, добавив .ToList (); в конце моего кода выше. – Trowa

+0

@Trowa не стесняйтесь отмечать это как правильный ответ, если он решил проблему. – Danny

Смежные вопросы