Как проверить, содержит ли возвращаемый массив по крайней мере два элемента?

#c# #linq

#c# #linq

Вопрос:

Вот мой код:-

Repository.DB.Table01Repository.AsQueryable().Where(item => (item.Name.Split(' ')[1] == null)).ForEach(items => _VerifyList.Add(items.Name.Trim())) ;

Я разделяю ‘Name’ на ‘ ‘, и если в нем нет второго элемента, мне нужны эти записи.

Спасибо..

Ответ №1:

Поскольку Split будет создано два или более элементов, если Name содержит хотя бы один пробел, вы можете записать его следующим образом:

 Repository.DB.Table01Repository.AsQueryable()
    .Where(item => !item.Name.Contains(" "))
    .ForEach(items => _VerifyList.Add(items.Name.Trim()));
 

На самом деле нет необходимости выполнять Split .

Кроме того, Contains может быть сопоставлен с SQL (это один из методов CLR, который сопоставляется с каноническими функциями LINQ), что означает, что запрос будет успешно выполнен в вашей базе данных. Другие методы (такие как Split itself) не могут использоваться при запросе базы данных через IQueryable , и это приведет к возникновению исключения во время выполнения.

Комментарии:

1. Вы имеете в виду item.Name . Содержит(» «) == false .

2. @User13839404: Да, пропустил ввод a ! впереди, извините. Исправлено.

Ответ №2:

В этом сценарии следует опасаться пробелов. "abcd ".Split().Count() вернет 2 из-за пробельного символа в конце. Чтобы избежать этого, используйте Trim() метод удаления начальных и конечных пробелов перед разделением следующим образом:

 if(item.Name.Trim().Split() > 1) 
{
   // Do stuff
}
 

или в предложении Where:

 .Where(item => (item.Name.Trim().Contains(" ")))