2011-01-11 7 views
0

このSQLは大文字されていないすべての名前を選択:Entity Framework 4:SQLからLinqへ:大文字ではない文字列を選択するには?

String.Compareと文字列=文字列の両方:どのようにLINQの(?Entity Frameworkの4)

編集に同じ思いでしょう

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

を大文字小文字を区別しないUPPER(name) = nameのSQLに解決してください。

答えて

1

それは純粋な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を含める必要があります。

+0

それはうまくいった。 TYVM。私はのカスタムクラスを実行し、それ以外の場合はローカルですべてのレコードを取得しようとするので、スキップとSQLステートメントにかかるすべての必需品を追加する必要があります。とてもかっこいい。 –

1

私はあなたが達成しようとしていることを正確に理解していません。

Entity FrameworkとADO.NETは、一般にSQLサーバーとは異なるパターンを持っています。 クエリの構文に固執する場合は、ストアドプロシージャまたはUDFを作成し、それをEFに移植します。

LINQで実行しようとしましたが、LINQ用のEF SQL生成で大文字小文字を区別しないため、方法が見つかりませんでした。 だから、あなたはUDFかSPROCでそれをやらなければならないと思います。

UPDATE:

私は今のままにしなければならないが、私はこの記事はあなたを助けるかもしれないと思う: Unicode characters causing issues in SQL Server 2005 string comparison

+0

SP、ビューなどは素晴らしいですが、複雑さが増します。あなたのコードは に解決されました[タイトル] FROM [context] AS [t0] WHERE [t0]。[タイトル] =大文字小文字を区別しないUPPER([t0]。[タイトル])サーチ。 –

+0

@Dr。ジム、そうです。私は私の答えを更新しました。 – Shimmy

1

あなたが大文字に文字列を変換するTOUPPER()メソッドを使用することができ、例えば

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

もちろん、あなたがToUpper()方法に特にCultureInfoを供給する必要があるかどうか、あなたが!=演算子を使用するのではなく、文化固有の比較をしたいかどうかを検討すべきです。

+0

問題はCollat​​e Latin1_General_BINがないため、比較では大文字と小文字が区別されません。 [Name] = UPPER([t0]。[Name]) [名前] AS [名前] FROM [エンティティ] AS [t0] [名前] = UPPER([t0]。[Name]) すべての項目を選択します。場合にかかわらず。私は確かに答えかもしれない文化特有の比較を見ている。 –

+0

ああ、もちろん - 私はSQL側で大文字と小文字の区別がないことを忘れています。(私は最近、SQLサーバとちょっと離れています!) - CultureInfoを使う方法を見つけることができたら、 SQLで必要な操作を強制します。明らかにsgmooreの答えが働きますが、明示的なSQL操作が必要な欠点があります。 –

関連する問題