2011-08-19 11 views
6

私はEntity Framework 4.1でMVC3を使用しています。会社名の最初の文字でページングされるグリッドがあります。私はそれが素晴らしい仕事をしていますが、いくつかの企業は数字で始まります。選択した番号から開始する会社を取得するために、次のLINQクエリを使用していますが、番号で始まる会社を選択するにはどうすればよいですか?Entity Framework:フィールドが数字で始まるところ

var b = (from c in dbContext.Companies 
      where c.CompanyName.StartsWith(selectedCharacter) 
      select c) 

私が試してみた:それはSQLに変換する方法を知らないので、私はエラーを取得し、

where char.IsNumber(l.CompanyName[0]) 

をしかし。

編集:私はちょうど行うことができることを知っている.CompanyName.StartsWith( "1")|| .CompanyName.StartsWith( "2")など。より良い方法はありますか? 。 すべてのアイデア?

+2

また、c.CompanyName.StartsWith(selectedCharacter)の問題はselectedCharacterとして '1'、 '2' ......... – Incognito

+0

質問を投稿して以来、私は.CompanyName.StartsWith( "1 ")|| .CompanyName.StartsWith( "2")とおそらく最善の方法ですが、それはちょうど反復的に思えました。 SQLはあなたが期待するものです WHERE([Extent1]。[CompanyName] LIKE '1%')OR([Extent1]。[CompanyName] LIKE '2%')OR([Extent1]。[CompanyName] LIKE '3%')..など – Jamiegs

答えて

9

このようなことができます。

var numbers = new string[]{"1","2","3","4","5","6","7","8","9","0"}; 
var b = (from c in dbContext.Companies 
     where numbers.Contains(c.CompanyName.Substring(0,1)) 
     select c).ToList(); 

あなたの会社が空の場合でも問題が発生する可能性があります。

+0

あなたの提案を試みましたが、次の例外が発生します。 'System.Char'型の定数を作成できません。このコンテキストでは、プリミティブ型( 'Int32、String、およびGuid'など)のみがサポートされています。 – Jamiegs

+0

新しい文字を文字列に変更することができます。私の答えは今更新されます。 – Jethro

+0

これを以前に試みましたが、次の例外があります。 LINQ to Entitiesは、 'System.String ToString()'メソッドを認識せず、このメソッドをストア式に変換できません。 – Jamiegs

関連する問題