5

私は MVC4 と Entity Framework 5 でアプリを開発していますが、最近、クエリを実行するときにこの例外に遭遇しました。

{"LINQ to Entities はメソッド 'System.String PadLeft(Int32, Char)' メソッドを認識せず、このメソッドはストア式に変換できません。"}

過去に同様のエラーに遭遇したとき、クエリの外側で変数を作成し、その変数を LINQ ステートメントで使用しました。残念ながら、この場合は行の結果を操作しているため、どうすればよいのか、それが最善の方法なのかわかりません。どんな助けでも大歓迎です。私のクエリは以下の通りです:

            IQueryable<System.String> LEAPrograms = db.Datamart_Draft
            .Where(where => where.snapshot_id == snapshot_id
                && !String.IsNullOrEmpty(where.entity_program))
            .Select(sel => (sel.entity_program.PadLeft(PROGRAMLENGTH, '0'))).Distinct();
4

3 に答える 3

12

あまりエレガントではありませんが、仕事はします:

...
.Select(sel => SqlFunctions.Replicate
                   ("0", PROGRAMLENGTH - sel.entity_program.Length)
             + sel.entity_program)
于 2013-02-28T15:37:31.057 に答える
-4

リストを作成してから、結果を繰り返し処理しました。List で .Distinct() を実行すると、IEnumerable にキャストされます。どちらがパフォーマンス的に優れているかはわかりませんが、少し努力すれば、ほぼ同じことを行う LINQ to Entities 用の PadLeft を作成できると思います。

            IEnumerable<String> LEAPrograms = db.Datamart_Draft.Where(wh => wh.snapshot_id == snapshot_id && !String.IsNullOrEmpty(wh.entity_program)).Select(se => se.entity_program).Distinct();
        // create and populate a List (because LINQ to Entities doesn't support PadLeft)
        List<String> PaddedPrograms = new List<String>();
        foreach (var row in LEAPrograms)
        {
            PaddedPrograms.Add(row.PadLeft(4, '0'));
        }
        LEAPrograms = PaddedPrograms.Distinct();
于 2013-02-28T18:10:14.767 に答える