#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(" ")))