Первое, что вы хотите сделать 1002 *, это переписать ваше выражение "w" следующим образом:
var w = from p in ds.Tables["ReadExcel"].AsEnumerable() select p.ItemArray;
.ToArray () и .ToList () должны быть сохранены как параметры последней инстанции & mdash; например, если вам нужно передать выражение в функцию, для которой требуется массив, или если вы действительно хотите защитить результат от нескольких итераций. Вызов их слишком рано вызывает итерацию ваших данных и не позволяет использовать хорошие свойства композиции linq, чтобы сначала сузить результат (и, таким образом, значительно сэкономить память и время выполнения).
Как только это будет сделано, вы можете добавить дополнительные директивы from и where для объединения данных следующим образом:
var w = from p in ds.Tables["ReadExcel"].AsEnumerable()
where p.ItemArray.Intersect(sExcelString).Any()
select p.ItemArray;
Обратите внимание, что я редко использую синтаксис понимания запросов; Я предпочитаю функцию вызова / лямбда-нотации Я также набрал это прямо в браузере. Соедините их вместе, и это вряд ли сработает "как есть". Здесь важно то, что это должно пройти 90% пути. Подумайте о том, как последние 10% действительно поняли, как все это работает, чтобы вы могли лучше писать будущие выражения.