2011-10-29 3 views
5

トリムスタートを使用してエンティティフレームワークが何をすべきか理解する方法を教えてください。ここでエンティティフレームワーククエリのユーザーtrimstart

は私のクエリです:

string number="123"; 
Workers.Where(x => x.CompanyId == 8).Where(x => x.Number.TrimStart('0') == number); 

は、どのように私は(会社8の労働者が多い)AsEnumerableせずに、このクエリの作業を行うことができますか?

+0

「数値」は常に数値ですか? –

+0

@Austin Salonen:数字は文字列です! – Naor

+0

確かに。あなたの例のように文字列の内容が常に数字であることを意味していると思いますか、あるいは 'AAK89234'のようなものですか? –

答えて

10

SqlFunctions.PatIndexを試してみてください。私は、値が"000123","000One","abcde"であり、値が"123","One""abcde"の行を正しく選択して、以下のようなクエリをテストしました。

Workers.Where(x => x.CompanyId == 8 && 
        x.Number.Substring(SqlFunctions.PatIndex("%[^0]%", x.Number).Value - 1) == number); 
-1

のでEFがTrimStart方法だけパラメータを指定せずにサポートする唯一の空白SQLでトリムの機能がトリムができるからです。

あなたの要件は、データベースのデータ品質の向上についての議論につながるはずです。あなたのデータは、このタイプのクエリを効率的にサポートするための品質を提供しません。

+0

私はあなたが知っていることを理解していますが、これはデータがゼロで保存されているという問題です。しかし、今はこれがシステムであり、私はそれを解決する必要があります。ありがとう。 – Naor

+0

Downvoted - 私はデータベースがどこにデータを整理すべきか同意するが、サードパーティのデータベースはそれを常に制御するとは限らない。より有用な答えは、Jeffが言及したような問題に対する解決策であろう。多くの理論的解答があり、SOには十分実用的ではない。 – hewstone

関連する問題