Divyay208 Ответов: 2

Выберите использование linq для исключения полей, начинающихся с чисел в MVC


Как исключить поля, начинающиеся с цифр в LINQ

Что я уже пробовал:

Я знаю, что мы можем сделать это в Sql как

select * from UserTable where username not  LIKE '%[0-9]%'


Как сделать то же самое в LINQ

BillWoodruff

Являются ли поля, начинающиеся с чисел, реальными числовыми значениями или это строки ? Может быть, вы имеете в виду исключить "строки" ?

2 Ответов

Рейтинг:
2

BillWoodruff

Предполагая,:

1. 'UserTable - это DataTable

2. вы добавили ссылку на System.Data.DataSetExtensions.dll : таким образом, вы можете использовать метод расширения поля [^]

3. столбец "имя пользователя имеет тип" строка:

IEnumerable<DataRow> data = UserTable.Rows.Cast<DataRow>()
    .Where((DataRow row) =>
        ! char.IsDigit(row.Field<string>("UserName")[0]));


Maciej Los

5ed!

Рейтинг:
10

Maciej Los

Like оператор переводится на:

var data = context.UserTable.Where(x=>x.username.Contains("whatever"));

для исключения:
var data = context.UserTable.Where(x=>!x.username.Contains("whatever"));

Но, похоже, вы хотите использовать регулярное выражение, так что следуйте этому: Как объединить запросы LINQ с регулярными выражениями (C#) | Microsoft Docs[^]

Пример:
List<string> users = new List<string>(){"Adam", "0Barbara", "Aegon", "1Cecylia",
				"Zea", "999Robert", "H8tor", "Gre0on",};

string pattern = @"^\d.*$";
Regex r = new Regex(pattern);

var data = users.Where(u=>!r.IsMatch(u));
foreach(string s in data)
	Console.WriteLine($"{s}");


Правка #1
Возможно, Вам также будет интересно использовать следующие методы:
Строка.Метод StartsWith (Система) | Microsoft Docs[^]
Строка.Метод EndsWith (Система) | Microsoft Docs[^]


BillWoodruff

Вы не можете использовать Linq непосредственно для DataTable или DataTable.Rows

Maciej Los

Я не вижу такого требования, Билл.
Кстати: это очень хорошая нота.

BillWoodruff

природа DataTable RowCollection требует того типа кастинга, который я показываю в своем ответе :)