Entity Framework 4: SQL для Linq: Как выбрать строки, которые не являются прописными? - PullRequest
0 голосов
/ 11 января 2011

Этот SQL выбирает все имена, которые не в верхнем регистре:

select name
from   myTable
where  not (UPPER(name) = name collate Latin1_General_BIN )

Как бы вы поступили так же в Linq (Entity Framework 4?)

Edit:

И String.Compare, и string = string разрешают в SQL значение UPPER(name) = name, которое не учитывает регистр.

Ответы [ 3 ]

1 голос
/ 11 января 2011

Вы можете использовать метод ToUpper () для преобразования строки в верхний регистр, например,

entities.Where(x => x.Name != x.Name.ToUpper()).Select(x => x.Name)

Очевидно, вам следует подумать, нужно ли указывать конкретный CultureInfo для метода ToUpper() и хотите ли вы проводить сравнение с учетом конкретной культуры вместо использования оператора !=.

1 голос
/ 11 января 2011

Это не чистый LINQ, но вы можете использовать ExecuteQuery, например,

 string sql = @"
     select id , name 
     from   myTable
     where  not (UPPER(name) = name collate Latin1_General_BIN )
  ";

var results = 
   (from r in dc.ExecuteQuery<myTable>(sql) 
    select  new { r.Name } 
   ).ToList();

Обратите внимание, что вам нужно включить в запрос id, даже если вам нужно только имя.

1 голос
/ 11 января 2011

Я не совсем понимаю, чего вы пытаетесь достичь.

Entity Framework и ADO.NET в целом имеют шаблоны, отличные от SQL-сервера.Если вы хотите придерживаться синтаксиса в своем запросе, создайте хранимые процедуры или UDF и перенесите его на EF.

Я попытался выполнить это с помощью LINQ и не нашел способа, так как EFГенерация SQL для LINQ чувствительна к регистру!Поэтому я думаю, вам придется сделать это с UDF или SPROC.

ОБНОВЛЕНИЕ:

Я должен уйти сейчас, но я думаю, что этот пост может помочь вам: Unicode символывызывающие проблемы при сравнении строк в SQL Server 2005

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...