0

2 つのテーブルを渡して最初のテーブルを返すジェネリック クラスを作成しようとしています。2 つの変数は、linq クエリでテーブルを結合するために使用する文字列値です。私が返したいのは IQueryable 値ですが、DataQuery 値を返し続けます。

これは、「メソッド 'System.Reflection.PropertyInfo GetProperty(System.String)' has no supported translation to SQL」というエラーで MVC ビューに失敗して終了します。

以下のコード:

    var result = GetTable<Table1, Table2>("Table1id", "Table2id");


    public virtual IQueryable<T> GetTable<T, A>(string table1Variable,
                                        string table2Variable) 
                                                  where T : class
                                                  where A : class
    {
        var table1 = entityDatabaseDC.GetTable<T>();
        var table2 = entityDatabaseDC.GetTable<A>();

        return from entity in table1.AsQueryable()
               join entity2 in table2 on entity.GetType().GetProperty(table1Variable)
                                      equals  entity2.GetType().GetProperty(table2Variable)
               select entity;

    }

単一のテーブルでは問題なく機能します。

     var result = repository.GetTable<Table1>();

     public virtual IQueryable<T> GetTable<T>() where T : class
    {
           return entityDatabaseDC.GetTable<T>();
    }

私がしようとしていることが可能かどうか疑問に思っています。

4

3 に答える 3

0

ご入力いただきありがとうございます。この問題をもう少し詳しく調べた後、私は一歩下がって設計図に戻り、これが私が達成しようとしていることの正しい解決策であるかどうか、そしてそれが有益であるかどうかを考えることにしました。

于 2013-03-06T10:52:55.110 に答える
0

問題は、linq-to-sql が結合式 (ステートメント全体) を SQL に変換しようとすることです。もちろんGetProperty、SQL ステートメントから呼び出す方法はありません。

ですから、これは決してうまくいかないのではないかと心配しています。しかし、ここで提案されているようにそれを行うことができるかもしれません: How to create a dynamic LINQ join extension method

于 2013-02-19T21:26:06.983 に答える
0

多分あなたはこのようなことを試してみるべきです:

   public virtual IQueryable<T> GetTable<T, A>(string table1Variable,
                                        string table2Variable) 
                                                  where T : class
                                                  where A : class
    {
        var table1 = entityDatabaseDC.GetTable<T>();
        var table2 = entityDatabaseDC.GetTable<A>();

        return from entity in table1.AsQueryable()
               join entity2 in table2 on 
               entity.GetType().GetProperty(table1Variable).GetValue(table1,null)
                                      equals 
               entity2.GetType().GetProperty(table2Variable).GetValue(table2,null)
               select entity;

    }

プロパティの.GetValue(table1,null)後に注意してください。

于 2013-02-19T18:48:04.960 に答える