super_user Ответов: 3

Символы в LINQ и SQL


Я стараюсь это СП и запросов LINQ
SP
выберите отдельный регион из tblRe где регион
этот запрос возвращает

ISL
Paris
NY
SDF-23
LON
SDF-43
234
AM
RU
KAS
FJS-35
SDF-32
SDF-45


я не хочу значения, которое имеет цифры/символы..
как я это делаю в sql

а потом я попробую это сделать в linq

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

var list = tea.tblRe.AsEnumerable()
                       .Where(x => !x.Region.Any(char.IsDigit))
                        .ToList().Distinct();


это показывает только имена, но с повторением, т. е.

ISL
Paris
NY
NY
LON
KAS
AM
RU
KAS
LON
LON
AM
KAS
KAS


теперь я не хочу повторения

какое-нибудь решение?

3 Ответов

Рейтинг:
24

OriginalGriff

Удалите Толист - он ничем не поможет-и проверьте свои данные.
Когда я моделирую ваш код здесь:

List<string> list = new List<string>();
list.Add("ISL");
list.Add("Paris");
list.Add("NY");
list.Add("SDF-23");
list.Add("LON");
list.Add("SDF-43");
list.Add("234");
list.Add("AM");
list.Add("RU");
list.Add("KAS");
list.Add("FJS-35");
list.Add("SDF-32");
list.Add("SDF-45");
var list2 = list.AsEnumerable()
           .Where(x => !x.Any(char.IsDigit))
           .Distinct();</string></string>

Я получаю именно то, что ожидаю:
ISL
Paris
NY
LON
AM
RU
KAS
Без каких-либо дубликатов.


0x01AA

Извините, опять я с вопросом. Я тоже проверил, и все выглядит нормально. Теперь предположим, что в необработанных данных есть "КАС "и " КАС". Есть ли какой-нибудь способ обрезать "x" перед добавлением его в список результатов? Я пытался x.Trim().Any(..., но он не обрезает (конечно?) строку из исходного списка.
Заранее большое вам спасибо.

[Решено] ответом №2 Томаса Такака :)

OriginalGriff

Да-Выберите:
.Где(Х =&ГТ; !х.Любой(типа char.IsDigit))
.Выберите(х => У Х.Отделка())
.Отчетливый();

Рейтинг:
18

Tomas Takac

Проблема в том, что вы запускаете distinct не на свойстве region, а на всей записи, которая является сложным объектом. Попробовать это:

var list = tea.tblRe.AsEnumerable()
    .Select(x => x.Region)
    .Where(region => !region.Any(char.IsDigit))
    .Distinct()
    .ToList();


0x01AA

А 5, просто учитесь на своем ответе :)

Karthik_Mahalingam

5, самый лучший.

Рейтинг:
12

Richard Deeming

Чтобы сделать это в SQL, вам нужно использовать NOT LIKE сравнение:

SELECT DISTINCT
    Region 
FROM
    tblRe 
WHERE
    Region Not Like '%[0-9]%'
;

LIKE (Transact-SQL)[^]