Ну, вы можете просто положить несколько предложений «где» непосредственно, но я не думаю, что вы этого хотите. Несколько статей «где» заканчивается more ограничительный фильтр - я думаю, вы хотите меньше ограничительный. Я думаю, что вы действительно хотите:
DataTable tempData = (DataTable)grdUsageRecords.DataSource;
var query = from r in tempData.AsEnumerable()
where r.Field<string>("UserName") != "XXXX" &&
r.Field<string>("UserName") != "YYYY"
select r;
DataTable newDT = query.CopyToDataTable();
Обратите внимание на & & вместо ||. Вы хотите выбрать строку, если имя пользователя не равно XXXX и имя пользователя не указано ГГГ.
EDIT: Если у вас есть целая коллекция, это еще проще. Предположу, что коллекция называется ignoredUserNames
:
DataTable tempData = (DataTable)grdUsageRecords.DataSource;
var query = from r in tempData.AsEnumerable()
where !ignoredUserNames.Contains(r.Field<string>("UserName"))
select r;
DataTable newDT = query.CopyToDataTable();
В идеале вы хотели бы сделать это HashSet<string>
, чтобы избежать Contains
вызова занимает много времени, но если коллекция достаточно мала, он не будет делать много шансов.
У меня есть коллекция UserName. Как передать его в предложение where динамически. – Ganesha
Я знаю, что на это был дан ответ давным-давно, но мое быстрое предложение было бы попытаться использовать соединение, а не содержать. Это намного эффективнее (особенно если ваш набор данных имеет разумный размер). – ArtificialGold