Я не уверен, что вы подразумеваете под "взять один и пропустить остальные", но я подозреваю, что вы путаете, как работают операции LINQ. Они возвращают новую последовательность на основе указанных вами критериев, и эта новая последовательность имеет только то, что вы просили.
Например, если у вас есть список с тремя элементами и вы назвали Take(1)
, вы получите IEnumerable с 1 элементом. Больше нечего пропустить, потому что в вашем списке только один элемент. Ваша исходная таблица данных осталась без изменений - последовательности LINQ неизменны.
Похоже, все, что вы действительно хотите сделать, это:
List<Person> oPerson2 = (from c in dt.AsEnumerable()
select new Person
{
Name = c.Field<string>("Name"),
HQ = c.Field<bool>("HQ")
}).Take(1).ToList();
Конечно, это очень распространенная операция в LINQ, поэтому есть еще один, несколько «более ясный» способ сделать это:
Person oPerson2 = (from c in dt.AsEnumerable()
select new Person
{
Name = c.Field<string>("Name"),
HQ = c.Field<bool>("HQ")
}).First();