0

LINQ to SQL を使用するアプリケーションを LINQ to Entities に変換中です。私はリポジトリ パターンを使用していますが、LINQ to SQL では機能するがエンティティでは機能しないという問題が発生しました。

データ レイヤーでは、LINQ ステートメントを使用してオブジェクト グラフを埋め、データベース エンティティが他の場所に公開されないようにしています。この例では、カテゴリのリストを返すルックアップ リポジトリがあります。次のようになります。

public IQueryable<Entities.DomainModels.Category> getCategories()
    {
        return (from c in Categories
                where !c.inactive
                orderby c.categoryName
                select new Entities.DomainModels.Category
                {
                    id = c.categoryID,
                    category = c.categoryName,
                    inactive = c.inactive
                });
    }

後で、カテゴリをサブクエリに入れたいと思います。これは次のようになります。

var d = from p in Programs
    let categories = (from pc in p.Categories
                      join c in getCategories() on pc.categoryID equals c.id
                      select c)
   select new 
    {
        id = p.id,
        title = p.title
       categories = categories.ToList()
        };

これを実行すると、次のエラーが表示されます。

LINQ to Entities はメソッド 'System.Linq.IQueryable`1[Entities.DomainModels.Category] ​​getCategories()' メソッドを認識せず、このメソッドはストア式に変換できません。

参考までに、必要なデータは返されませんが、次のように動作します (基本的には結合です)。

var q = from p in Programs
    from pc in p.Categories
    join c in getCategories() on pc.categoryID equals c.id
    select new 
    {
        id = p.id,
            category = c
        };

エラーが概念的に何を意味するかは理解していますが、LINQ to SQL はそれを機能させます。データレイヤー全体にこのパターンがあり、それを維持したいと思っています。これは機能するはずですか?そうでない場合、レイヤーを混合せずに変更するにはどうすればよいですか。

4

1 に答える 1