0

Entity Framework 5 を使用するように ADO.NET アプリケーションを変換していますが、検索機能を書き直しているときに問題が発生しました。UI レイヤーと DB レイヤーを分離しました。DB レイヤーには内部 edmx があり、データ取得メソッドが公開されています。

そのような方法の 1 つが検索です。関数はフォーム コントロールの値に直接アクセスできなくなったため (以前は、UI コード ビハインド ファイルに LINQ クエリがありました)、フォームがそれらの値を渡せるようにするクラスを作成しました。

public class SearchParameter
{
    public string Name { get; set; }
    public bool Checked { get; set; }
    public object Value { get; set; }
}

これにより値がボックス化されることはわかっていますが、複数の値の型を許可する別の方法は見当たりませんでした

検索機能はこんな感じ

public static IList SearchRecords(IList<SearchParameter> searchParams)
{
   using (var db = new EarnieEntities())
   {
       var result = db.Non_Conformance;

       //Filter Results based on params
       foreach (var p in searchParams.Where(p => p.Checked))
       {
           switch (p.Name)
           {
               case "NCID":

                   break;
               case "DateRaised":

                   break;
               case "RaisedBy":

                   break;
               case "RaisedFor":

                   break;
           }
       }

       return result.ToList();
   }
}

これらのケースのそれぞれで LINQ to SQL を使用すると、このようなものを記述して、そのフィールドで設定された結果をフィルター処理できます。

result = result.Where(x => x.NC_ID == (int) p.Value).Select(x => x);

LINQ to SQL を使用する際のアイデアは、遅延読み込みを利用して、結果にアクセスする前にすべてのフィルター処理を許可することでした。これにより、ユーザーは UI でフィールドを選択し、検索条件を作成できます。

EFを使用すると、

ソース タイプ Linq.IQueryable< Type > をターゲット タイプ Data.Entity.DbSet< Type > に変換することはできません

そのようなフィルタリングを行う別の方法はありますか?

[アップデート]

結果を単純に DbSet にキャストしようとすると、別のエラーが発生します

タイプ 'System.Data.Entity.Infrastructure.DbQuery 1[EarnieDAL.Sources.Non_Conformance]' to type 'System.Data.Entity.DbSet1 [EarnieDAL.Sources.Non_Conformance]のオブジェクトをキャストできません

4

1 に答える 1